记录前几天strus2和springboot中关于文件上传后台的一些区别:
前台使用了jquery-form的表单ajax回调
<form id="uploadForm" enctype="multipart/form-data" method="POST" name="upfileform" target="nm_iframe"> <input type="file" id="uploadInput" style="opacity: 0;width: 80px;height:30px;" name="upload" onchange="uploadfile()"/> </form> /** * 表单初始化 */ function initFormSubmit() { options = { url: '/wtfk/upLoadFile.action', //默认是form的action,如果声明,则会覆盖 type: 'post', //默认是form的method,如果声明,则会覆盖 async: false, dataType: 'json', //接受服务端返回的类型 //提交后的回调函数 success: function (data) { if (data.success) { $('#uploadInput').hide(); window.setTimeout(function () { $('.info-font').attr("onclick", "reportFile()"); $('.info-font').css("opacity", "1"); $('.addFont').hide(); $('.addLink').hide(); $.cookies.set('GUID', data.GUID); // data.fileName = decodeURIComponent(data.fileName,true); // console.log(encodeURI(encodeURI(data.fileName))); // json1 = eval("(" + data.fileName + ")"); // console.log(json1); $.cookies.set('fileName', data.fileName); $('.pfile').show(); $('.file')[0].innerHTML = data.fileName; layer.msg("文件上传成功!"); }, 500) } else { layer.msg(null == data.message ? '附件上传失败' : data.message); $("#uploadInput")[0].value = ''; $('.infofont').attr("onclick", "reportFile()"); $('.infofont').css("opacity", "1"); } }, }; //为表单绑定提交事件,触发后可返回回调函数 $('#uploadForm').submit(function () { $(this).ajaxSubmit(options); return false; }); }当获取到到表单对象后执行form.submit()后触发回调函数options。
后端:
使用springboot注解开发,使用MultipartFile接受文件对象,它有自己常见的一些工具方法可供调用。
@RequestMapping("upLoadFile") @ResponseBody @RequiresGuest public Map upLoadFile(@RequestParam("upload") MultipartFile file, HttpServletRequest request) { Map result = new HashMap(); String fileSizeInfo = ""; String fileTypeInfo = ""; try { System.out.println(file.getSize()); //获取上传的文件对象以及类型和文件名,文件的name属性一定要与这里声明的文件名一致 long fileSize = file.getSize() / 1024; // 若文件大于5M,则不予解析 if (fileSize > 1024 * 5) { fileSizeInfo = "上传文件大于5M"; throw new Exception("上传文件大于5M"); } String fileType = getExtensionName(file.getOriginalFilename().toLowerCase()); if (!isFileType(fileType)) { fileTypeInfo = "文件类型不正确"; throw new Exception("请上传正确的文件类型!"); } String uploadFileName = file.getOriginalFilename(); String GUID = wtfkService.upLoadFile(file, uploadFileName, fileType, request); result.put("success", true); result.put("GUID", GUID); result.put("fileName", uploadFileName); } catch (Exception e) { e.printStackTrace(); result.put("success", false); } finally { return result; } } public String upLoadFile(MultipartFile localFile, String fileName, String fileType, HttpServletRequest request) throws Exception { String dirName = "uploadFile/cpjg/wtfk/"; int index = fileName.lastIndexOf("."); String lastName = fileName.substring(index); // 获取随机生成的32位随机码 localFile.getSize(); String GUID = UUID.randomUUID().toString().replace("-", ""); String GUIDName = GUID + lastName; String filePath = getSavePath(dirName, request) + GUIDName; String savePath = "/" + dirName + GUIDName; //将临时上传的文件插入临时附件表 File targetFile = new File(filePath); BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File(filePath))); out.write(localFile.getBytes()); out.flush(); out.close(); wtfkDao.updateFile(GUID, fileName, savePath, fileType); return GUID; }使用struts2进行开发:
通过注入的File文件对象接受文件对象并且获取上传的文件对象以及类型和文件名,文件的name属性一定要与这里声明的文件对象名一致,File对象中也封装了一些获取例如文件名的工具方法可供调用。
//上传的文件 private File upload; //文件类型 private String uploadContentType; //文件名称 private String uploadFileName; /** * 附件上传 */ public void upLoadFile() { JSONObject result = new JSONObject(); String fileSizeInfo = ""; String fileTypeInfo = ""; try { HttpServletRequest request = ServletActionContext.getRequest(); if (!isCanUseSys(request.getSession(), 1000)) { throw new Exception("操作过于频繁!"); } //获取上传的文件对象以及类型和文件名,文件的name属性一定要与这里声明的文件名一致 File file = getUpload(); long fileSize = wtfkService.getFileSize(file) / 1024; // 若文件大于5M,则不予解析 if (fileSize > 1024 * 5) { fileSizeInfo = "上传文件大于5M"; throw new Exception("上传文件大于5M"); } String fileType = FileUtil.getExtensionName(getUploadFileName()).toLowerCase(); if (!isFileType(fileType)) { fileTypeInfo = "文件类型不正确"; throw new Exception("请上传正确的文件类型!"); } String uploadFileName = getUploadFileName(); String GUID = wtfkService.upLoadFile(file, uploadFileName, fileType); result.put("success", true); result.put("GUID", GUID); result.put("fileName", uploadFileName); result.put("message", "文件上传成功!"); } catch (Exception e) { e.printStackTrace(); result.put("success", false); result.put("message", LogTool.getExceptionMessage(e) + ',' + fileSizeInfo + fileTypeInfo); } finally { responseToWeb(result.toString()); } } /** * 附件上传功能 * * @return 文件GUID * @throws Exception */ public String upLoadFile(File localFile, String fileName, String fileType) throws Exception { String dirName = "uploadFile/cpjg/wtfk/"; int index = fileName.lastIndexOf("."); String lastName = fileName.substring(index); // 获取随机生成的32位随机码 getFileSize(localFile); String GUID = UUID.randomUUID().toString().replace("-", ""); String GUIDName = GUID + lastName; String filePath = getSavePath(dirName) + GUIDName; String savePath = "/" + dirName + GUIDName; //将临时上传的文件插入临时附件表 String sql = " INSERT INTO BDA_CP_T_SYS_WTFK_UPLOAD VALUES(?,?,?,TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'),?) "; File targetFile = new File(filePath); FileUtil.copyFile(localFile, targetFile); bgdDataSource.updateBySql(sql, new Object[]{GUID, fileName, savePath, fileType}); return GUID; }