首先回忆一下springmvc中的文件上传
1)引入文件上传相关jar包,commons-io 、commons-fileupload
2)文件上传表单提交方式必须为post
3)要求表单的enctype属性必须为:multipart/form-data
4)后台接收文件时,使用multipartFile 变量与前端name属性值保持一致
5)在springmvc的配置文件中必须加入,且id是框架规定写死的。
<bean id="multipartResolver" class="CommonsMultipartResolver">
springboot中的文件上传
1)在springboot项目中,自动引入了有关文件上传的jar包 commons-io、commons-file
2)准备表单
提交方式:post enctype="multipart/form-data"
<form action="${pageContext.request.contextPath}/upload/test" method="post" enctype="multipart/form-data"> <input type="file" name="fileTest"/> <input type="submit" value="上传"/>
</form>
3)后台控制器方法参数multipart 和 前台name属性值保持一致
@Controller @RequestMapping("/upload") public class uploadController { @RequestMapping("/test") public String upload(MultipartFile fileTest, HttpServletRequest request) throws IOException { //获取文件的原始名 String filename = fileTest.getOriginalFilename(); System.out.println(filename); //根据相对路径获取绝对路径 String realPath = request.getSession().getServletContext().getRealPath("/upload"); fileTest.transferTo(new File(realPath,filename)); return "success"; } }
4)修改springboot中默认上传文件大小(为1M)
#更改上传文件的大小上限
http:
multipart:
max-file-size: 100MB //最大上限为100MB
max-request-size: 100MB //最大请求上限与max-file-size保持一致
springboot中的文件下载
1)页面中提供一个下载的链接
<a href="${pageContext.request.contextPath}/download/test?fileName=idea快捷键.txt">点我下载</a>
2)开发下载文件的controller
下载文件的过程是一个读写操作,将文件读入输入流,然后通过输出流读出,读出的时候动态设置响应类型
@Controller @RequestMapping("/download") public class downloadController { @RequestMapping("/test") public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception { //获取文件的绝对路径 String realPath = request.getSession().getServletContext().getRealPath("upload"); //获取输入流对象(用于读文件) FileInputStream fis = new FileInputStream(new File(realPath, fileName)); //获取文件后缀(.txt) String extendFileName = fileName.substring(fileName.lastIndexOf('.')); //动态设置响应类型,根据前台传递文件类型设置响应类型 response.setContentType(request.getSession().getServletContext().getMimeType(extendFileName)); //设置响应头,attachment表示以附件的形式下载,inline表示在线打开 response.setHeader("content-disposition","attachment;fileName="+URLEncoder.encode(fileName,"UTF-8")); //获取输出流对象(用于写文件) ServletOutputStream os = response.getOutputStream(); //下载文件,使用spring框架中的FileCopyUtils工具 FileCopyUtils.copy(fis,os); } }