1.html內容html
<div> <form method="post" action="/Cyberspace/main/informationBatchAdd.do" enctype="multipart/form-data"> <input type="file" id="excelFile" multiple="multiple" name="file"/> <button type="submit">批量上傳</button> </form> </div>
2.服務端後臺支持多文件上傳的接口json
/** * 信息上報批量增長 */ @RequestMapping(value = "informationBatchAdd", method = RequestMethod.POST) @ResponseBody public JSONResult informationBatchAdd(MultipartHttpServletRequest request) { JSONResult jsonResult; try { Integer result = 0; MultiValueMap<String, MultipartFile> multiValues = request.getMultiFileMap();//獲取請求中全部的文件流 Iterator<Map.Entry<String, List<MultipartFile>>> iterator = multiValues.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<MultipartFile>> entry = iterator.next(); for (MultipartFile file : entry.getValue()) { InputStream in = file.getInputStream();//轉換成輸入流 XSSFWorkbook readWb = new XSSFWorkbook(in); for (int i = 0; i < readWb.getNumberOfSheets(); i++) {//遍歷該表格中全部的工做表,i表示工做表的數量 getNumberOfSheets表示工做表的總數 XSSFSheet sheet = readWb.getSheetAt(i); 。。。 Integer totalRow = sheet.getLastRowNum();//獲取excel共有多少行 for (int rowNum = 1; rowNum <= totalRow; rowNum++) { // 循環行Row XSSFRow hssfRow = sheet.getRow(rowNum); if (hssfRow != null && hssfRow.getPhysicalNumberOfCells() >= 7) {//getPhysicalNumberOfCells 獲取縱列數 。。。 } } result += 。。。; } } } jsonResult = new JSONResult(CODE_SUCCESS, MSG_SUCCESS, result);//JSONResult是本身定義的一個類 } catch (Exception e) { jsonResult = new JSONResult(CODE_FAIL, MSG_FAIL, null); e.printStackTrace(); } return jsonResult; }
3.假如遇到要中轉上傳文件流到以上的接口中,那麼下面的內容就是你的福音api
/** * 中轉文件 * * @param files 上傳的文件,該參數的獲取 request.getFiles("xxxx")或者參照第二步中的方法 * @return 響應結果 */ public static String httpClientUploadFile(List<MultipartFile> files, String remoteUrl) { final String remote_url = remoteUrl;// 第三方服務器請求地址 CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; try { HttpPost httpPost = new HttpPost(remote_url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//設置瀏覽器兼容模式 for (int i = 0; i < files.size(); i++) { MultipartFile file = files.get(i); String fileName = file.getOriginalFilename(); builder.addBinaryBody("file" + i, file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流 builder.addTextBody("filename", fileName);// 相似瀏覽器表單提交,對應input的name和value } HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost);// 執行提交 HttpEntity responseEntity = response.getEntity(); result = EntityUtils.toString(responseEntity, UTF8); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
4.中轉下載文件瀏覽器
/* 接口:http://192.168.1.10:8080/GRSS/yw/api/fileDownload -------請求參數---- path:upload/1505474431679.zip //文件路徑 以upload/ 開頭 filename: report.zip , //源文件名 ------測試用例---- 請求地址://http://localhost:8888/Cyberspace/main/fileDownload.do?filename=JSSDK中文.html 獲取這個文件://url = "http://210.14.152.181:8188/examples/JSSDK.html"; */ @RequestMapping(value = "fileDownload", method = RequestMethod.GET) @ResponseBody public String fileDownload(HttpServletRequest request, HttpServletResponse response) { String url; try { String fileName = StringUtils.isNotEmpty(request.getParameter("filename")) ? request.getParameter("filename") : new Date().getTime() + ""; fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");//解決中文get方式亂碼的問題url = "http://192.168.1.100:8188/examples/JSSDK.html";//我想下載這個JSSDK這個html文件 FileUtil.downloadFileFromNet(url, fileName, response); } catch (Exception e) { e.printStackTrace(); } return null; }
/** FiletUtil.downloadFileFromNet * 從網絡中下載文件 */ public static void downloadFileFromNet(String urlPath, String fileName, HttpServletResponse response) throws MalformedURLException { InputStream fis = null; OutputStream os = null; try { URL url = new URL(urlPath); URLConnection urlConnection = url.openConnection(); // 以流的形式下載文件 fis = new BufferedInputStream(urlConnection.getInputStream()); // 設置響應報頭 response.reset(); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, ENCODING)); response.setCharacterEncoding(ENCODING); // 寫入響應流數據 os = new BufferedOutputStream(response.getOutputStream()); byte[] bytes = new byte[1024]; while (fis.read(bytes) != -1) { os.write(bytes); } } catch (Throwable e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (fis != null) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } }