所需要的jar包
一、文件上传
springmvc.xml
<!-- 配置 MultipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 指定所上传文件的总大小不能超过1024000KB。
注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="1024000"></property>
</bean>
<!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionAttribute" value="ex"></property>
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
</props>
</property>
</bean>
1、实现上传文件的内容的读取
jsp代码
<form action="testHttpMessageConverter" method="post" enctype="multipart/form-data">
File: <input type="file" name="file"/>
Desc: <input type="text" name="desc"/>
<input type="submit" valuue="Submit"/>
</form>
java代码
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body) {
System.out.println(body);
return "helloword! " + new Date();
}
运行结果
将文件里的内容打印出来
2、单文件上传
jsp代码
<form action="FileUpload.do" method="POST" enctype="multipart/form-data">
<input type="hidden" name="tuzi" value="tuzi">
上传文件:<input type="file" name="uploadfile">
<input type="submit" value="文件上传"/>
</form>
Java代码
@RequestMapping("/FileUpload")
public String queryFileData(@RequestParam("uploadfile")
CommonsMultipartFile file, HttpServletRequest request) {
// MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
if(!file.isEmpty()) {
//取文件格式后缀名
// String type = file.getOriginalFilename().substring(
// file.getOriginalFilename().indexOf("."));
//取文件名作为保存到服务器的文件名称
String filename = file.getOriginalFilename();
//存放的路径
String path = "D:\\upload\\" + filename;
//进行路径拼接=前半部分路径+文件名称
File destFile = new File(path);
try {
// FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
FileUtils
.copyInputStreamToFile(file.getInputStream(), destFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(path);
System.out.println(destFile);
return "success";
}
return "error";
}
运行结果
3、多文件上传
jsp代码
<form action="FileUploads.do" method="POST" enctype="multipart/form-data">
<input type="hidden" name="tuzi" value="tuzi">
上传文件:<input type="file" name="uploadfile">
上传文件:<input type="file" name="uploadfile">
上传文件:<input type="file" name="uploadfile">
<input type="submit" value="文件上传"/>
</form>
java代码
原理就是将 CommonsMultipartFile变成一个数组
@RequestMapping("/FileUploads")
public String queryFileDatas(@RequestParam("uploadfile") CommonsMultipartFile[] files, HttpServletRequest request) {
// MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
if (files != null) {
for(int i = 0; i < files.length; i++) {
// 取文件名作为保存到服务器的文件名称
String filename = files[i].getOriginalFilename();
// 存放的路径
String path = "D:\\upload\\" + filename;
// 进行路径拼接=前半部分路径+文件名称
File destFile = new File(path);
try {
// FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
FileUtils.copyInputStreamToFile(files[i].getInputStream(), destFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "success";
}
return "error";
}
二、实现文件下载
这里我们先在项目里放一个文件
<a href="testResponseEntity">Test ResponseEntity</a>
@RequestMapping("/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
byte [] body = null;
ServletContext servletContext = session.getServletContext();
InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
body = new byte[in.available()];
in.read(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment;filename=abc.txt");
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
return response;
}
运行结果