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)
@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.假如遇到要中转上传文件流到以上的接口中,那么下面的内容就是你的福音
/**
* 中转文件
*
* @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();
}
}
}
Spring MVC + Java 多文件上传及多文件中转上传的更多相关文章
- Spring MVC 学习总结(五)——校验与文件上传
Spring MVC不仅是在架构上改变了项目,使代码变得可复用.可维护与可扩展,其实在功能上也加强了不少. 验证与文件上传是许多项目中不可缺少的一部分.在项目中验证非常重要,首先是安全性考虑,如防止注 ...
- Spring MVC 搭建过程中web.xml配置引入文件的路径问题
为啥要说一下这么low的问题,因为我是一个比较low的人,哈哈.本来我技术有限,没事干自己撘个环境找找乐趣,结果被各种基础问题,弄的一脸蒙蔽.算了不多说,直接说问题. 1.首先说一下java编译后的文 ...
- 在Spring MVC项目中,注解方式使用 .properties 文件及 UTF-8编码问题
xml配置 <!-- 配置文件 --> <bean id="configProperties" class="org.springframework.b ...
- spring mvc学习笔记(一)web.xml文件配置的一点重要信息
通过这个web.xml文件可以看出,所有的*.shtml的请求,都会被springmvc这个servlet处理.这里如果没有指定contextConfigLocation这个参数,将会按照默认规则在c ...
- Spring MVC (Java),强制页面不缓存
response.setDateHeader("Expires",0); response.setHeader("Buffer","Tr ...
- Spring MVC-学习笔记(5)spring MVC的文件上传、下载、拦截器
1.文件上传. spring MVC为文件上传提供了直接的支持,这种支持是即插即用的MultipartResolver(多部分解析器)实现的.spring MVC使用Apache Commo ...
- 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能
Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...
- 深入理解java:4.1. 框架编程之Spring MVC
说到java的mvc框架,struts2和springmvc想必大家都知道, Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高 ...
- 五大 JAVA Web 框架的优缺点对比,Spring MVC 领先
毫无疑问,Java 是当今世界上最重要的编程语言之一.js 框架给程序员提供了 一个可以构建程序的坚实基础.它包括定义的类和功能,用于硬件设备管理,与系统软件交互并处理输入,让开发人员变得更轻松.Ja ...
随机推荐
- sklearn.svm包中的SVC(kernel=”linear“)和LinearSVC的区别
参考:https://stackoverflow.com/questions/45384185/what-is-the-difference-between-linearsvc-and-svckern ...
- 解决:IDEA unable to import maven project see logs for details问题+java http请求报java.net.SocketException: Permission denied:connect 问题
背景:用IDEA写了一个java发送http请求的maven项目. 运行时,项目报java.net.SocketException: Permission denied:connect问题: 修改po ...
- maven安装,maven命令行使用
1 下载maven,解压(无需安装),配置环境变量,命令行mvn -v测试. 2 maven常用命令:https://www.cnblogs.com/wkrbky/p/6352188.html 3 注 ...
- Docker libnetwork(CNM)设计简介
The Container Network Model CNM由以下三个组件构成:Sandbox,Endpoint以及Network Sandbox 一个Sandbox包含了一个容器网络栈的配置.其中 ...
- R-CNN for Small Object Detection
R-CNN for Small Object Detection 文章方法概括 这篇文章主要讨论针对小目标的目标检测 文章为了证明:对传统R-CNN style的方法进行改进,可以用于小目标检测,并且 ...
- 怎么找出解析失败的sql
本文由我和公司同事问心共同测试分析完成. 很多时候我们会有这样一个误区,语法错误或者对象不存在应该在语法语义检查这个步骤就结束了,怎么还会存在共享池里面呢?带着这个几个问题我们做几个简单的测试. 我们 ...
- matplotlib作图——plot() 线图
线图 #定义 matplotlib.pyplot.plot() plot([x], y, [fmt], data=None, **kwargs) plot([x], y, [fmt], [x2], y ...
- virtualenv使用
virtualenv安装不同版本的python 来自为知笔记(Wiz)
- 系统间接口联调总是报500 for URL 和 乱码
两个系统做数据传输时,懒省事,直接访问 action 方式.结果总是报500,或者fileNotFount. 究其原因是因为两边的数据格式没对应上.post请求返回的格式是String,数据提供方返回 ...
- 按钮js跳转到非表单提交页
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...