本篇文章小编给大家分享一下SpringMVC实现文件上传与下载代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
0.环境准备
1.maven依赖
org.junit.jupiter junit-jupiter-api 5.7.0 test javax.servlet javax.servlet-api 3.1.0 provided org.springframework spring-webmvc 5.2.6.RELEASE commons-io commons-io 2.8.0 commons-fileupload commons-fileupload 1.3.3
2.springConfig。xml配置文件
jsp" />
3.web.xml配置
web org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springConfig.xml 1 web *.mvc characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forRequestEncoding true forResponseEncoding true characterEncodingFilter /*
1.文件上传
文件上传分为三种方式:
单个文件单字段
多个文件单字段
多个文件多字段
注意点:
1、提交方式为表单的post请求
2、from属性中必须有enctype=“multipart/form-data”
3、如果是单字段多文件:输入框中的属性必须为:multiple=“multiple”
4、表单中的属性name必须和后端参数一致
1.前端代码
文件上传 文件上传(单个文件单字段上传)
文件上传(多文件单字段上传)
文件上传(多文件多字段上传)
2.后端代码
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; import java.io.File; import java.io.IOException; /** * @author compass * @version 1.0 * @date 2021-05-11 14:33 */ @Controller public class UploadIFileController { // 处理单个文件上传 @PostMapping("/uploadFile1.mvc") public ModelAndView uploadFile1(MultipartFile file, HttpSession session) throws IOException { ModelAndView view = new ModelAndView(); // 得到文件名称 String filename=file.getOriginalFilename(); System.out.println("文件名称:"+filename); if (!file.isEmpty()){ // 判断文件的后缀 if (filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".txt")); //设置文件的保存路径 String savePath="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile"; File srcFile = new File(savePath,filename); // 执行文件保存操作 file.transferTo(srcFile); view.setViewName("forward:/uploadSuccess.jsp"); }else { view.setViewName("forward:/uploadFailed.jsp"); } return view; } // 处理多文件上传 @PostMapping("/uploadFile2.mvc") public ModelAndView uploadFile2(MultipartFile[] file,HttpSession session) throws IOException { ModelAndView view = new ModelAndView(); //设置文件的保存路径 String savePath="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile"; String[] filenames = new String[file.length]; // 只要上传过来的文件为空或者是不符合指定类型的都会上传失败 for (int i = 0; i2.文件下载
文件下分为两种情况:
文件名称是纯英文字母的
文件名带有中文不处理会乱码的
1.前端代码
文件下载 2.后端代码
/** * @author compass * @version 1.0 * @date 2021-05-11 15:23 */ @Controller public class DownloadController { // 非中文名称文件下载 @GetMapping("/download1.mvc") public ResponseEntityfileDownload1(String filename,HttpServletRequest request) throws IOException { String path="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile"; File file = new File(path,filename); HttpHeaders header = new HttpHeaders(); header.setContentDispositionFormData("attachment",filename); header.setContentType(MediaType.APPLICATION_OCTET_STREAM); ResponseEntity result = new ResponseEntity(FileUtils.readFileToByteArray(file), header, HttpStatus.OK); return result; } // 中文名称文件下载 @GetMapping("/download2.mvc") public ResponseEntity fileDownload2(String filename,HttpServletRequest request) throws IOException { System.out.println(filename); String path="C:Users14823IdeaProjectsspringMVCfileuploadsrcmainwebappWEB-INFfile"; filename = filename.replace("_", "%"); filename= URLDecoder.decode(filename,"UTF-8"); String downloadFile=""; if (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0){ filename= URLEncoder.encode(filename,"UTF-8"); downloadFile=filename.replaceAll("+","%20"); }else { downloadFile=new String(filename.getBytes("UTF-8"),"ISO-8859-1"); } File file = new File(path,filename); HttpHeaders header = new HttpHeaders(); header.setContentDispositionFormData("attachment",downloadFile); header.setContentType(MediaType.APPLICATION_OCTET_STREAM); ResponseEntity result = new ResponseEntity(FileUtils.readFileToByteArray(file), header, HttpStatus.OK); return result; } }