注意自定义异常的使用及方法的抽取。
try { } catch (Exception e) { e.printStackTrace(); logger.error("generate error : " + e.getMessage()); throw new ConvertsServiceException(e.getMessage()); }
import java.io.File; import java.io.IOException; import java.util.Arrays; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @Service("iUploadFileService") public class UploadFileService implements IUploadFileService { private static final Logger logger = LoggerFactory.getLogger(UploadFileService.class); @Autowired private IEsbFileDao esbFileDao; @Autowired private ISysFileDao sysFileDao; @Override public EsbFile saveFile(MultipartFile file, String[] allowExtName, long maxLength, String module) throws UploadFileException { logger.debug("saveFile begin..."); // 校验文件 validateFile(file, allowExtName, maxLength); logger.debug("validateFile pass..."); // 获取时间戳 String time = System.currentTimeMillis() + ""; // 拼装服务端文件存储路径 String ext = FilenameUtils.getExtension(file.getOriginalFilename()); ext = "".equals(ext) ? "" : ("." + ext); String path = new StringBuilder( SystemConfiguration.getConfigByName(Constants.SYSTEM_FILE_PATH)) .append(File.separator).append(time).append(File.separator) .append(time).append(ext).toString(); logger.debug("savedFilePath : " + path); // 保存文件 File savedFile = new File(path); try { FileUtils.writeByteArrayToFile(savedFile, file.getBytes()); } catch (IOException e) { // 保存文件出错 throw new UploadFileException( "\u4fdd\u5b58\u6587\u4ef6\u51fa\u9519"); } logger.debug("writeByteArrayToFile pass..."); // 将文件信息存储到数据中 // sysfile SysFile sf = new SysFile(); sf.setOriFileName(file.getOriginalFilename()); sf.setServerAbsPath(path); sf.setFileSize(file.getSize()); try { sf.setMd5CheckSum(MD5Util.getMD5(savedFile)); } catch (Exception e) { logger.error("MD5_CHECK_SUM error..."); e.printStackTrace(); } ObjectUtil.setCreatedBy(sf); sf = sysFileDao.save(sf); // esbfile EsbFile ef = new EsbFile(); ef.setModuleCode(module); ef.setFileId(sf.getId()); ef.setSysFile(sf); ObjectUtil.setCreatedBy(ef); esbFileDao.save(ef); logger.debug("saveFile end..."); return ef; } /** * 验证上传文件是否合法,否则抛出异常 * * @param file * @param allowExtName null或空数组则允许所有文件 * @param maxLength 为负数则允许上传任意大小文件 * @throws UploadFileException */ private void validateFile(MultipartFile file, String[] allowExtName, long maxLength) throws UploadFileException { String fileName = ""; long fileSize = 0L; // 验证文件为空 if (file == null || (fileName = file.getOriginalFilename()).equals("") || (fileSize = file.getSize()) <= 0) { // 上传文件为空 throw new UploadFileException( "\u4e0a\u4f20\u6587\u4ef6\u4e3a\u7a7a"); } // 验证文件大小 if (maxLength > 0 && fileSize > maxLength) { // 上传文件大小超出上限 throw new UploadFileException( "\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u4e0a\u9650 [" + maxLength + "byte]"); } if (allowExtName != null && allowExtName.length > 0) { if (Arrays.binarySearch(allowExtName, FilenameUtils.getExtension(fileName).toLowerCase()) < 0) { // 上传文件格式不符合要求 throw new UploadFileException( "\u4e0a\u4f20\u6587\u4ef6\u683c\u5f0f\u4e0d\u7b26\u5408\u8981\u6c42 " + Arrays.toString(allowExtName)); } } } }
public class UploadFileException extends Exception { private static final long serialVersionUID = -7352737478882318028L; public UploadFileException() { super(); } public UploadFileException(String message, Throwable cause) { super(message, cause); } public UploadFileException(String message) { super(message); } public UploadFileException(Throwable cause) { super(cause); } }
调用:
@RequestMapping(value="/esbService/uploadTemplet.do", method = RequestMethod.POST) @ResponseBody public void uploadTemplet(@RequestParam MultipartFile file, HttpSession session, HttpServletResponse response){ // 返回值 Map<String, Object> result = new HashMap<String, Object>(2); EsbFile esbfile = null; // 上传文件保存 try { esbfile = upFileDS.saveFile(file, new String[]{"doc", "docx", "zip"}, -1, "SRV_DEFINE.IMPORT_DOC"); } catch (UploadFileException e) { result.put("code", 1); result.put("msg", e.getMessage()); writeResponse(response,result); return; } // 导入规范 try { convertsSrvDS.importWord(esbfile); } catch (Exception e) { result.put("code", 1); result.put("msg", e.getMessage()); writeResponse(response,result); return; } result.put("code", 0); writeResponse(response,result); } private void writeResponse(HttpServletResponse response, Map<String, Object> result) { try { response.setContentType("text/html;charset=utf-8"); response.getWriter().write(JSON.toJson(result)); response.getWriter().flush(); } catch (IOException e) { e.printStackTrace(); } }
以前代码:
public class TempletUploadUtil { private static final Logger logger = LoggerFactory.getLogger(TempletUploadUtil.class); public static Map<String, Object> uploadTemplet(@RequestParam MultipartFile file, HttpSession session, HttpServletResponse response,SysConfig env) { Map<String, Object> result = new HashMap<String, Object>(2); String newName = null; try { if (!file.isEmpty()) { if (env == null || "".equals(env)) { result.put("code", 1); result.put("msg", "获取上传路径配置失败"); writeResponse(response, result); return null; } // 时间戳为文件名保存文件 int index = file.getOriginalFilename().lastIndexOf("."); if(index>-1){ newName = env.getConfigValue().trim() + File.separator + System.currentTimeMillis()+ File.separator + file.getOriginalFilename(); }else{ newName = env.getConfigValue().trim() + File.separator + String.valueOf(System.currentTimeMillis()); } if(!isAllowedFileType(newName)){ result.put("code", 3); result.put("msg", "文件类型不允许!"); writeResponse(response,result); return null; } // newName = file.getName()+"_"+newName; // 写文件 FileUtils.writeByteArrayToFile(new File(newName), file.getBytes()); String loc = new File(newName).getAbsolutePath(); result.put("code", 0); result.put("msg", loc); } } catch (IOException e) { logger.error("文件上传失败:", e); result.put("code", 2); result.put("msg", "文件上传失败!"); writeResponse(response, result); return null; } return result; } private static void writeResponse(HttpServletResponse response, Map<String, Object> result) { try { response.setContentType("text/html;charset=utf-8"); response.getWriter().write(JSON.toJson(result)); response.getWriter().flush(); } catch (IOException e) { e.printStackTrace(); } } private static Boolean isAllowedFileType(String newName){ String ext = newName.substring(newName.lastIndexOf(".")+1); String allowType = "wsdl,zip,rar"; return allowType.indexOf(ext.toLowerCase()) >= 0; } }
相关推荐
如果这个组件支持异常处理,那么开发者可能会在自定义异常上下文中使用它,例如,当用户在界面上输入无效数据时抛出自定义异常。 总结来说,自定义异常是软件开发中的重要实践,它允许我们定制错误处理策略,使代码...
接下来,我们将深入探讨如何将Vue组件包装为Web组件自定义元素。 首先,我们需要理解Vue组件和Web组件的基本概念。Vue组件是Vue.js的核心特性之一,它允许我们通过定义不同的模块来拆分复杂的用户界面,每个模块都...
@ vue / web-component-wrapper 包装并将Vue组件注册为自定义元素。兼容性。 不支持IE11及以下版本。 如果定位本机支持ES2015但不支持本机Web组件的浏览器: 您还将需要 。 有关和支持,请访问caniuse.com。 使用...
iView的上传组件 `<Upload>` 提供了多种配置项,如`multiple`、`before-upload`、`show-upload-list`、`on-success` 和 `action`等,这些参数和方法有助于实现各种自定义功能。 1. **multiple**:这个属性用于设置...
将异常处理模块化意味着我们将创建一个独立的库或者组件,专门负责异常的捕获和上报。这个库可以包含以下功能: 1. 自定义的异常处理器:继承自UncaughtExceptionHandler,捕获未被捕获的异常。 2. 异常日志记录:...
6. **公共异常类**:为了规范化异常信息,通常会定义一个或多个公共异常类,比如`BusinessException`,它包含业务错误码和错误信息,这使得在抛出和捕获异常时能提供一致的信息,提高了代码的可读性。 7. **模块化...
Office 2016 Install 不仅是一款在线 Office 2016 下载安装工具,还可以用于 Office 2016 离线安装包的组件自定义安装,如果你只想安装 Word/Excel/PowerPoint 或者只想安装其中一款软件,Office 2016 Install 就是...
在本案例中,我们关注的是一个自定义的上传Excel文件的弹框组件。这个组件允许用户选择并上传Excel文件,以便进行数据导入或其他需要处理Excel数据的操作。 在 Vue.js 中,组件是构建应用程序的基本单元,它们可以...
同时,`testForm`是一个示例程序,展示了如何在实际应用中实例化并使用这些自定义控件,对于理解和学习这些组件的功能及用法非常有帮助。 通过深入理解并实践这些自定义组件和控件的代码,开发者不仅可以掌握C# UI...
在Flex中,自定义组件是开发人员为了满足特定需求而创建的特殊用户界面元素。这些组件可以扩展标准的Flex组件库,或者从头开始构建,以提供独特的功能和视觉表现。 在标题“各种Flex自定义组件”中,我们可以推断这...
qmotypes文件是用于在设计时提供类型信息的文件,它让自定义组件能够在QT Designer中被识别。通过运行qmotypes指令,可以在指定的目录生成plugins.qmltypes文件,使得自定义组件可以在QT Designer的库面板中显示。 ...
在Android开发中,自定义组件是提升应用独特性和用户体验的关键技术。自定义组件允许开发者根据需求扩展Android系统原生组件的功能,或者创建全新的组件样式,从而实现个性化界面和交互效果。下面将详细介绍Android...
在Spring Boot应用中,自定义异常处理是一种常见的做法,它允许开发者对应用程序可能出现的异常进行统一管理和返回定制化的响应。本文将深入剖析Spring Boot如何处理自定义异常。 首先,我们来看一个简单的自定义...
在Android开发中,自定义组件是一项重要的技能,它允许开发者根据特定需求创建具有独特功能和外观的视图。本教程将通过一个简单的“TestOurselfWidget”实例来讲解如何实现自定义组件。自定义组件可以增强应用的用户...
【OpenHarmony】ArkTS 语法基础 ② ( ArkTS 自定义组件 | 自定义可导入组件 - export 声明模块 | 导入自定义组件 - import 导入组件 ) https://hanshuliang.blog.csdn.net/article/details/139407374 博客源码快照 ...
在Android应用开发中,自定义组件是提升用户体验和实现独特设计的重要手段。本文将深入探讨Android自定义组件的开发过程,旨在帮助开发者更好地理解和实践这一关键技能。 首先,理解Android组件的基本概念至关重要...
本文将深入解析TimePicker组件,并介绍如何进行自定义,以满足更加个性化的应用需求。 首先,我们来了解TimePicker的基本用法。在Android SDK中,TimePicker分为两种模式:数字时钟(digital)和模拟时钟(analog)...
### uni-app 使用抖音微信自定义组件详解 #### 一、引言 随着移动互联网的发展,跨平台应用开发框架越来越受到开发者的青睐。其中,uni-app作为一款使用Vue.js语法进行多端开发的前端框架,凭借其高效、易用的特点...
### Flex4自定义组件开发详解 #### 一、Flex4自定义组件概述 Flex4(也称为Spark)是Adobe Flex框架的一个重要版本,它引入了许多新的特性,包括改进的组件库、性能优化以及更好的可定制性。在Flex4中,自定义组件...
在Flash AS3编程环境中,自定义组件是提升应用界面独特性和功能扩展性的关键技术。AS3(ActionScript 3)是Adobe Flash平台的核心脚本语言,用于创建交互式内容、动画以及富互联网应用程序(RIA)。自定义组件允许...