Map<String, Object> rtnMap = new HashMap<String, Object>(); // 獲取文件 String tempPath = request.getSession().getServletContext().getRealPath("/temp"); File tmpFile = new File(tempPath); // 消息提示 try { // 使用Apache文件上傳組件處理文件上傳步驟: // 1、創建一個DiskFileItemFactory工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); // 設置工廠的緩沖區的大小,當上傳的文件大小超過緩沖區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。 factory.setSizeThreshold(1024 * 100);// 設置緩沖區的大小為100KB,如果不指定,那么緩沖區的大小默認是10KB // 設置上傳時生成的臨時文件的保存目錄 factory.setRepository(tmpFile); // 2、創建一個文件上傳解析器 ServletFileUpload upload = new ServletFileUpload(factory); // 解決上傳文件名的中文亂碼 upload.setHeaderEncoding("UTF-8"); // 3、判斷提交上來的數據是否是上傳表單的數據 if (!ServletFileUpload.isMultipartContent(request)) { // 按照傳統方式獲取數據 rtnMap.put("code", "-1"); rtnMap.put("msg", "導入失敗,請選擇上傳文件!"); return rtnMap; } // 設置上傳單個文件的大小的最大值,目前是設置為1024*1024字節,也就是1MB upload.setFileSizeMax(1024 * 1024); // 設置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設置為10MB upload.setSizeMax(1024 * 1024 * 10); // 4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項 MultipartFile item = ((MultipartHttpServletRequest) request).getFile("fileExl"); if (item.getSize() > 1024 * 1024) { rtnMap.put("code", "-1"); rtnMap.put("msg", "導入失敗,您上傳的文件過大,單個文件不能超過1M!"); return rtnMap; } String filename = item.getOriginalFilename(); logger.info(filename); if (filename == null || filename.trim().equals("")) { rtnMap.put("code", "-1"); rtnMap.put("msg", "導入失敗,請選擇上傳文件!"); return rtnMap; } // 注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如: // c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt // 處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf("/") + 1); // 得到上傳文件的擴展名 String fileExtName = filename.substring(filename.lastIndexOf(".") + 1); // 如果需要限制上傳的文件類型,那么可以通過文件的擴展名來判斷上傳的文件類型是否合法 logger.info("上傳的文件的擴展名是:" + fileExtName); final String[] CONTACT_ALLOW_TYPES = {"xlsx", "xls"}; boolean isHave = false; for (String ext : CONTACT_ALLOW_TYPES) { if (ext.equals(fileExtName.toLowerCase())) { isHave = true; break; } } if (!isHave) { rtnMap.put("code", "-1"); rtnMap.put("msg", "導入失敗,請選擇正確文件文件!"); return rtnMap; } // 獲取item中的上傳文件的輸入流 InputStream is = item.getInputStream(); zzjgFacade.batchImportZzjg(new RequestBean(), is); } catch (Exception e) { rtnMap.put("code", "-1"); rtnMap.put("msg", "導入失敗!"); return rtnMap; }
//實際應用
public BWJsonResult uploadFile(HttpServletRequest request) { // 上傳時生成的臨時文件保存目錄 String tempPath = request.getSession().getServletContext().getRealPath("/temp"); File tmpFile = new File(tempPath); // 消息提示 try { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 100);// 設置緩沖區的大小為100KB,如果不指定,那么緩沖區的大小默認是10KB factory.setRepository(tmpFile); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); if (!ServletFileUpload.isMultipartContent(request)) { logger.info("文件不可為空"); return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_PARAMS_MISS_ERROR)); } upload.setFileSizeMax(1024 * 1024 * 10); upload.setSizeMax(1024 * 1024 * 100); // 4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項 MultipartFile item = ((MultipartHttpServletRequest) request).getFile("file1"); if (item.getSize() > 1024 * 1024 * 10) { return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_SYS_FILE_TOL_ERROR)); } // 得到上傳的文件名稱, String filename = item.getOriginalFilename(); logger.info("上傳的文件名稱" + filename); if (filename == null || filename.trim().equals("")) { return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_PARAMS_MISS_ERROR)); } filename = filename.substring(filename.lastIndexOf("/") + 1); String fileExtName = filename.substring(filename.lastIndexOf(".") + 1); logger.info("上傳的文件的擴展名是:" + fileExtName); InputStream in = item.getInputStream(); String saveFilename = AdminUtils.makeFileName(fileExtName); String realSavePath = AdminUtils.makePath(saveFilename, "specialUse"); String filurl = realSavePath + "/" + saveFilename; logger.info("文件上傳路徑為:" + filurl); int result = HttpClientUtil.sendPostFiles(uploadUrl + filurl, in); in.close(); logger.info("文件保存路徑是:" + uploadUrl + filurl); logger.info("文件下載路徑是:" + downloadUrl + filurl); if (result == 1) { //response.getWriter().write("0" + "," + "文件上傳成功!" + "," + filurl + "," + filename); return new BWJsonResult(new SysFileResponse(downloadUrl + filurl)); } else { // response.getWriter().write("-1" + "," + "文件上傳失敗,原因:網絡異常"); return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_SYS_FILE_IN_ERROR)); } } catch (Exception e) { logger.error("", e); //response.getWriter().write("-1" + "," + "文件上傳失敗,原因:" + e.getMessage()); return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_TENANT_ERROR)); } }
//調用代碼
<html>
<body>
<form action="http://127.0.0.1:8087/sys/uploadfile" method="POST" enctype="multipart/form-data">
<input type="file" name="file1" />
<input type="submit" name="submit" />
</form>
</body>
</html>
