文
章
目
录
章
目
录
一、文件上传
1.使用SpringMVC上传文件,需要实现MultipartResolver
接口,而该接口的实现类SpringMVC已经提供了,为CommonsMultipartResolver
2.具体步骤:
a)导入jar包
b)springmvc.xml配置CommonsMultipartResolver
<!-- 配置CommonsMultipartResolver,用于文件上传 Spring IOC容器在初始化时会自动寻找id为multipartResolver的bean,并将其加入到IOC容器中 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 配置文件上传默认编码为UTF-8 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 配置文件上传最大值,单位字节 ,如果取值-1则表示无限制--> <property name="maxUploadSize" value="102400"></property> </bean>
c)编写controller上传代码
jsp页面:
controller:
@RequestMapping("testUpload") public String testUpload(MultipartFile file,HttpServletRequest request) throws Exception { // 判断文件是否为空,空则返回错误页面 if (file.isEmpty()) { return "error"; } // 获取文件存储路径(绝对路径) String path = request.getServletContext().getRealPath("/WEB-INF/upload"); // 获取原文件名 String fileName = file.getOriginalFilename(); // 创建文件实例 File filePath = new File(path, fileName); // 如果文件目录不存在,创建目录 if (!filePath.getParentFile().exists()) { filePath.getParentFile().mkdirs(); System.out.println("创建目录" + filePath); } // 写入文件 file.transferTo(filePath); return "success"; }
注意:一般情况文件名是需要修改保证唯一性,则可以使用UUID生成
注意:tomcat重启,上传的文件会被清除,原因在于eclipse会重新部署项目,在实际开发中不会存在清除情况。
二、文件下载
方式一:
/* * 下载方式一: * ①获取前台要下载的文件名称 * ②设置响应类型 * ③设置下载页显示的文件名 * ④获取下载文件夹的绝对路径和文件名合并为File类型 * ⑤将文件复制到浏览器 */ @RequestMapping("download") @ResponseBody public void download(HttpServletRequest req, HttpServletResponse resp, String filename) throws Exception { System.out.println("开始下载文件:"+filename); String realPath = req.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径 File file = new File(realPath, filename);//把下载文件构成一个文件处理 filename:前台传过来的文件名称 //设置响应类型 ==》 告诉浏览器当前是下载操作,我要下载东西 resp.setContentType("application/x-msdownload"); //设置下载时文件的显示类型(即文件名称-后缀) URLEncoder防止中文文件名显示乱码 resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); //下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端 Files.copy(file.toPath(), resp.getOutputStream());//Files.copy(要下载的文件的路径,响应的输出流) }
方式二:
/* * 下载方式二:Spring框架技术 */ @RequestMapping(value = "download") public ResponseEntity<byte[]> download(HttpServletRequest request,String filename) throws IOException { String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");//获取下载文件的路径 File file = new File(realPath, filename);//把下载文件构成一个文件处理 filename:前台传过来的文件名称 HttpHeaders headers = new HttpHeaders();//设置头信息 String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置响应的文件名 headers.setContentDispositionFormData("attachment", downloadFileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }