文件上传及多文件中转上传"/>
Spring MVC + Java 多文件上传及多文件中转上传
1.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.服务端后台支持多文件上传的接口
/*** 信息上报批量增加*/@RequestMapping(value = "informationBatchAdd", method = RequestMethod.POST)@ResponseBodypublic 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++) { // 循环行RowXSSFRow 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.假如遇到要中转上传文件流到以上的接口中,那么下面的内容就是你的福音
/*** 中转文件** @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)@ResponseBodypublic 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();}}}
更多推荐
Spring MVC + Java 多文件上传及多文件中转上传
发布评论