Spring MVC + Java 多文件上传及多文件中转上传

编程入门 行业动态 更新时间:2024-10-11 17:19:12

Spring MVC + Java 多<a href=https://www.elefans.com/category/jswz/34/1770535.html style=文件上传及多文件中转上传"/>

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 多文件上传及多文件中转上传

本文发布于:2023-07-02 08:53:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/988663.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件上传   上传   文件   Spring   MVC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!