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 多文件上传及多文件中转上传相关推荐
- Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...
Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...
- Spring MVC 学习总结(五)——校验与文件上传
目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二.JSR303验证器 2.1.添加hibernate-v ...
- maven创建SSM(Spring + Spring MVC +Mybatis)项目时的porn.xml文件下各个依赖包的作用
从上到下依次进行说明 首先是这个: <properties><project.build.sourceEncoding>UTF-8</project.build.sour ...
- spring mvc java 把多文件打包成zip,并下载
再来一篇 /*** 压缩并导出文件* @param zipPath 压缩文件临时路径 路径最后不要有 /* @param zipName 压缩为文件名 **.zip* @param createFil ...
- 解决Spring MVC整合Shiro出现无法访问静态资源文件的问题
解决方案:shiro过滤器配置拦截器链中添加"/static/**=anno"即可,"/static/**"为静态资源文件路径. <property na ...
- Spring MVC 如何上传多个文件到指定位置
Spring MVC 如何上传多个文件到指定位置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...
- IDEA中Spring MVC实现图片上传并显示
我们都知道web项目需要部署到tomcat服务器中运行 那么,我们又是如何通过tomcat来访问存放在本地磁盘中的图片呢?,通过tomcat访问本地图片,需要配置虚拟路径,下面介绍两种配置虚拟路径的方 ...
- java配置springmvc_Java方式配置Spring MVC
概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...
- spring_在Spring MVC中使用多个属性文件
spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...
最新文章
- 1.QT刷新ROS地图画面时,地图画面时不时卡住,甚至整个界面挂掉退出
- 未将对象引用设置到对象的实例
- scrum敏捷开发工具leangoo如何添加成员
- 使用netfilter框架处理ARP报文
- array.slice_Ruby中带有示例的Array.slice()方法
- Leetcode431.将N叉树编码为二叉树(golang)
- linux 临时去掉cp别名_命令别名:保护和服务
- unix操作系统图标大全
- 百度文库复制内容,留作笔记
- bt种子简介与magnet磁力介绍
- mobi格式转换成pdf格式
- android jni javah,JAVAH找不到类(android ndk)
- python答辩毕设ppt_毕设答辩ppt总结
- 【PX4学习笔记】3. PX4 固件烧写(1 探索过程)
- python opencv生成背景透明图标
- 有人说:世间唯一无刺的玫瑰,就是朋友。
- 进阶篇:2)DFMA方法的运用
- Mybatis-Plus 传入时间查询的方式
- 赛力斯华为智选SF5入驻华为旗舰店,将通过华为零售渠道销售
- 华为计算机黑屏怎么办,华为电脑开机屏幕没反应(开机黑屏的3个原因及解决法)...
热门文章
- swing版本山寨微信打飞机
- iphone开发之仿微信用户引导界面的实现
- ISO/IEC 9126 软件质量模型
- hadoop 光环大数据_Hadoop - HDFS的数据流剖析
- html中写jq,在jQuery中,能够操作HTML代码及其文本的方法是()
- 高3老师给大一学生的一封信
- 用word制作正规公文(转)
- 使用深山红叶工具盘备份瘫痪服务器的数据
- 腾讯云从良心云转变成“凉心云”,乱封禁服务器与域名怎么办?
- python爬取动态页面图片_python动态网页爬取:爬取pexel上的图片