SpringMVC实现文件上传和下载功能
Spring MVC提供了很好的机制来实现文件上传和下载功能,但需要借助一些依赖包和配置设置。
1. 添加MultipartResolver Bean
在Spring MVC应用中,我们需要添加一个MultipartResolver Bean以处理文件上传的请求。MultipartResolver 接口定义了文件上传的各个方法, 其中包括解析 HttpServletRequest 并返回 MultipartHttpServletRequest 等。
添加MultipartResolver Bean的方法有两种:
方法一:使用Spring框架提供的CommonsMultipartResolver类
CommonsMultipartResolver 是一种常用的MultipartResolver实现类,它是由Apache软件基金会提供的commons-fileupload和commons-io包提供文件上传和I/O支持。
在Spring配置文件中添加以下内容:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="20971520"/> <!-- 20MB -->
<property name="maxInMemorySize" value="1048576"/> <!-- 1MB -->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
上述配置中,maxUploadSize属性指定了最大上传文件大小为20MB,maxInMemorySize属性指定了最大接收文件的内存大小为1MB,defaultEncoding属性指定了上传文件编码方式为UTF-8。
方法二:使用Spring框架提供的CommonsMultipartResolver类
在Spring配置文件中添加以下内容:
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
2. 添加Upload控制器
Upload控制器用于处理上传文件的请求。
在控制器方法参数中添加javax.servlet.http.HttpServletRequest和org.springframework.web.multipart.MultipartFile类型的参数。
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(HttpServletRequest request, MultipartFile file) throws IOException {
// 获取上传文件的名称和数据
String fileName = file.getOriginalFilename();
byte[] data = file.getBytes();
// 保存文件
FileOutputStream fos = new FileOutputStream("/path/to/save/" + fileName);
fos.write(data);
fos.close();
// 返回成功信息
return "uploaded successfully";
}
3. 添加Download控制器
Download控制器用于提供文件下载功能。
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 获取文件路径
String filePath = "/path/to/download/file";
// 设置response参数
response.setHeader("Content-Disposition", "attachment; filename=\"file.name\"");
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
// 获取文件输入流
InputStream is = new FileInputStream(filePath);
// 写出文件
OutputStream os = response.getOutputStream();
byte[] buff = new byte[1024];
int length;
while ((length = is.read(buff)) != -1) {
os.write(buff, 0, length);
}
os.flush();
os.close();
is.close();
}
示例说明
这里给出两个示例:
示例一:文件上传
在前端表单中添加文件上传控件。
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
示例二:文件下载
在前端添加链接。
<a href="/download">Download File</a>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC实现文件上传和下载功能 - Python技术站