上传和下载操作:
1,导入依赖包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
2,前端
post请求
file控件
enctype=multipart/form-data 二进制表单类型
<form method="post" action="/file/upload" enctype="multipart/form-data">
<input type="file" name="source">
<input type="submit" value="上传">
</form>
<a href="/file/download?name=timg 2.jpg">下载</a>
3,mvc配置,上传解析器
视图解析器的bean对象:包含属性来设定上传大小
<!-- 上传解析器
id必须是:“multipartResolver”-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大可上传的文件大小 单位:byte 超出后会抛出MaxUploadSizeExceededException异常,可以异常解析器捕获 -->
<property name="maxUploadSize" value="1048576"></property>
</bean>
4,上传和下载
@RestController
@RequestMapping("/file")
public class UploadController {
//上传
@RequestMapping("/upload")
public String upload(HttpServletRequest request, HttpServletResponse response, MultipartFile source) throws IOException {
//制定上传资源路径。随着项目走
String realPath = request.getServletContext().getRealPath("/upload");
System.out.println(realPath); //部署路径/。。/upload
File file = new File(realPath);//将路径转换为File对象,并判断是否存在
if (!file.exists()) {
file.mkdirs(); //可创建多级
}
String fileName=source.getOriginalFilename(); //获取文件名
System.out.println("文件名"+fileName);//比如:文件名 a.jpg
File allFile=new File(file,fileName);//拼接作用 如://部署路径/。。/upload/a.jpg
source.transferTo(allFile);
return "upload Success!!!";
}
//下载
@RequestMapping("/download")
public void download(String name,HttpServletRequest request,HttpServletResponse response) throws IOException {
//首先获取下载资源的路径,,,部署路径
String realPath = request.getServletContext().getRealPath("/upload");
System.out.println("realpath------>"+realPath);
//设置响应头 告知浏览器,要以附件的形式保存内容 filename=浏览器显示的下载文件名
response.setHeader("content-disposition","attachment;filename="+name);
FileInputStream is=new FileInputStream(realPath+"/"+name);
IOUtils.copy(is,response.getOutputStream()); //将读取的资源反馈出去
is.close();
//显示当前下载资源即可,,无需返回跳转页面、
}
}