Spring MVC 实现本地文件的上传和下载

    xiaoxiao2022-07-07  222

    1、前台

    前台可以使用$("#form").ajaxSubmit(function(result) {})方法提交表单,如下方式可以在当前页面不刷新不跳转的的状态下完成表单的提交。

    //保存内容 function submitForm() { if(confirm("是否确认办理延期申请?")) { if(save()){ var url=webCfg.servePath + "/dcdbDelay/saveUpload"; $("#form").attr("enctype","multipart/form-data"); $("#form").attr("action",url); //$("#form").attr("target","nm_iframe"); //$("#form").submit(); //alert("保存成功"); // jquery 表单提交 $("#form").ajaxSubmit(function(result) { var data = $.parseJSON(result); // 对于表单提交成功后处理,message为表单正常提交后返回的内容 if (data.status === true) { alert("保存成功!"); $('#basis').css("color","black"); $('#delayDate').css("color","black"); }else{ alert(data.msg); } }); } } return false; // 必须返回false,否则表单会自己再做一次提交操作,并且页面跳转 }

     

    2、后台

    后台以SpringMVC处理文件的上传保存和下载。此处示例文件上传后保存在本地,实际项目中需要把文件保存到文件服务器上。

    2.1 文件上传保存

    /** * 保存上传文件信息 * @param model * @param request * @param file * @return * @throws IOException * @throws ParseException */ @RequestMapping(value = "/saveUpload", method = RequestMethod.POST) @ResponseBody public Object saveUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException { response.setContentType("text/html;charset=utf-8"); //获取前台参数 String taskSubId = request.getParameter("taskSubId"); String delayId = request.getParameter("delayId"); JSONObject result = new JSONObject(); String fileName = file.getOriginalFilename(); fileId = UUID.randomUUID().toString(); if (fileName != null && !"".equals(fileName)) { InputStream iso = file.getInputStream(); SaveFileFromInputStream(iso, "", fileName); } //保存信息至数据库(delayAO是实体类) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); DcdbTaskDelayAO delayAO = new DcdbTaskDelayAO(); delayAO.setId(delayId); delayAO.setDcdbSubTaskId(taskSubId); delayAO.setFileName(fileName ); delayAO.setFilePath("D:\\" + fileName); delayAO.setFileId(fileId); ServiceResult<Boolean> saveResult = dcdbTaskDelayService.saveOrUpdate(delayAO); if (saveResult != null && saveResult.getData() == true) { result.put("status", true); result.put("msg", "保存成功"); } else { result.put("status", false); result.put("msg", "保存失败!"); } return retString(result); } //保存上传的附件至服务器 public void SaveFileFromInputStream(InputStream is, String path, String filename) throws IOException { FileOutputStream fs = new FileOutputStream(path + "D:\\" + filename); byte[] buffer = new byte[1024 * 1024]; int bytesum = 0; int byteread = 0; while ((byteread = is.read(buffer)) != -1) { bytesum += byteread; fs.write(buffer, 0, byteread); fs.flush(); } fs.close(); is.close(); } //JASON對象格式化 private Object retString(JSONObject result) { String jsoStr = ""; try { jsoStr = JSON.json(result); } catch (IOException e) { e.printStackTrace(); return jsoStr; } return jsoStr; }

    2.2文件的下载

    文件的下载需要在前台提供一个可供使用的文件id,用于去数据库查询文件信息后下载。

    /** * 下载文件 * @param request * @param filename * @param filePath * @param model * @return * @throws Exception */ @RequestMapping(value = "/download", method = RequestMethod.GET) public ResponseEntity<byte[]> downloadFile(HttpServletRequest request, @RequestParam("delayId") String delayId, Model model) throws Exception { ServiceResult<DcdbTaskDelayAO> saveResult = dcdbTaskDelayService.getById(delayId); String filePath = saveResult.getData().getFilePath(); int startIndex = filePath.lastIndexOf("\\"); String filename = filePath.substring(startIndex + 1); //下载文件路径 File file = new File(filePath + File.separator); HttpHeaders headers = new HttpHeaders(); //下载显示的文件名,解决中文名称乱码问题 String downloadFielName = setFileName(request, filename); //通知浏览器以attachment(下载方式)打开图片 headers.setContentDispositionFormData("attachment", downloadFielName); //application/octet-stream : 二进制流数据(最常见的文件下载)。 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK); } /** * 处理下载文件名编码问题; * @param request * @param response * @param name * @throws UnsupportedEncodingException */ public String setFileName(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { String agent = request.getHeader("USER-AGENT"); if (null != agent && -1 != agent.indexOf("MSIE") || null != agent && -1 != agent.indexOf("Trident")) {// IE fileName = java.net.URLEncoder.encode(fileName, "UTF8"); } else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等 fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); } return fileName; }

     

    最新回复(0)