13.1、文件上传
-
前期准备:新建模块,添加web支持,配置web.xml,配置applicationContext.xml
-
导入依赖
-
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
-
文件上传配置
<!--文件上传配置--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <!--请求的编码格式,必须和jsp的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1--> <property name="defaultEncoding" value="utf-8"/> <!--上传文件大小上限,单位为字节(10485760=10M)--> <property name="maxUploadSize" value="10485760"/> <property name="maxInMemorySize" value="40960"/> </bean>
-
表单,前端jsp
<body> <form action="${pageContext.request.contextPath}/upload2" enctype="multipart/form-data" method="post"> <input type="file" name="file"/> <input type="submit" value="upload"/> </form> </body>
-
创建Controller
package com.likea.controller; @Controller public class fileupContorller { //@RequestParam("file") 将name=file控件得到的文件封装成commonsMultipartFile对象 //批量上传commonsMultipartFile则为数组即可 @RequestMapping("/upload") public String fileUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException, IOException { //获取文件名:file.getOriginalFilename(); String uploadFileName = file.getOriginalFilename(); //如果文件名为空,直接回到首页 if ("".equals(uploadFileName)) { return "redirect:/index.jsp"; } System.out.println("上传文件名:"+uploadFileName); //上传路径保存设置 String path=request.getServletContext().getRealPath("/upload"); //如果路径不存在,创建一个 File realPath = new File(path); if (!realPath.exists()){ realPath.mkdir(); } System.out.println("上传文件保存地址:"+realPath); InputStream is = file.getInputStream();//文件输入流 FileOutputStream os = new FileOutputStream(new File(realPath, uploadFileName));//文件输出流 //读取写出 int len=0; byte[] buffer = new byte[1024]; while ((len=is.read(buffer))!=-1){ os.write(buffer,0,len); os.flush(); } os.close(); is.close(); return "redirect:/index.jsp"; } /* 第二种方式: 采用file.Transto,来保存上传的文件 */ @RequestMapping("/upload2") public String upload2( @RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) throws IOException { //上传路径保存设置 String path = request.getServletContext().getRealPath("/upload"); File realPath = new File(path); if (!realPath.exists()){ realPath.mkdir(); } //上传文件地址 System.out.println("上传文件保存地址:"+realPath); //通过CommonsMultipartFile的方法直接写文件 file.transferTo(new File(realPath+"/"+file.getOriginalFilename())); return "redirect:/index.jsp"; } }
13.2、文件下载
-
方式一:controller
package com.likea.controller; @RestController public class FileDownController { @RequestMapping("/download") public String fileDown(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("进入下载方法"); //下载图片的地址 String path = request.getServletContext().getRealPath("/upload"); String fileName="1.jpg"; //1.设置response响应头 response.reset();//设置页面不缓存,清空buffer response.setCharacterEncoding("UTF-8");//字符编码 response.setContentType("multipart/form-data");//二进制传输数据 //设置响应头 response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8")); File file = new File(path, fileName); //2.读取文件输入流 FileInputStream input = new FileInputStream(file); //3.写出文件输出流 OutputStream output = response.getOutputStream(); byte[] buff = new byte[1024]; int index=0; //4.执行写操作 while ((index=input.read(buff))!=-1){ output.write(buff,0,index); output.flush(); } output.close(); input.close(); return "ok"; } }
-
方式二:jsp
<a href="${pageContext.request.contextPath}/statics/1.jpg">点击下载</a>