springmvc文件上传与下载
Springmvc文件上传与下载(注解)
一、springmvc的文件上传:
*文件上传的input的type="file"。
* 必须指定form 表单的enctype="multipart/form-data"
1.首先在springmvc-servlet.xml中配置springmvc文件上传的解析器:
<!-- 配置springmvc文件上传的解析器 --> <!-- 作用:将要上传文件的流中的数据读取到MultipartFile对象中--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>
【注意】:该解析器的id必须是multipartResolver,springmvc默认会按照这个id的值去找解析器。
2、在处理器中定义MultipartFile类型的参数接受页面传递过来的文件。
<1>如果是单文件上传,处理器方法中定义MultipartFile对象参数来接受,不需要加@RequestParam。
<1>如果是多文件上传,处理器方法中定义MultipartFile对象数组参数来接受,需要加@RequestParam。
// 上传 @RequestMapping("uploadt") // 将文件上传到tomcat中项目的upload目录 // 单个文件上传 public String upload(@RequestParam MultipartFile uploadFile,HttpSession session){ // 一、创建目标文件的File对象 // 1、获取upload目录在web项目中的真实路径 String directory = session.getServletContext().getRealPath("/upload"); // 2、获取上传文件的文件名,这个名称作为目标文件的文件名称 String uploadFileName = uploadFile.getOriginalFilename(); //为了避免文件重名问题,要生成一个时间,保证目标文件的文件名是唯一的 String time = System.currentTimeMillis() + ""; String newFileName = uploadFileName.replace(".", time + "."); // 3、将directory和uploadFileName拼接在一起形成目标文件的完整路径 String filePath = directory + "/" + newFileName; // 4、创建目标文件的File对象 File targetFile = new File(filePath); try { // 二、将要上传的文件上传到目标文件 // MultipartFile中有个方法做上传,targetFile指定目标文件的File对象 uploadFile.transferTo(targetFile); // 上传成功后,将上传的文件信息保存到数据库表 MyFile myFile = new MyFile(time, uploadFileName,session.getAttribute("uname").toString(),new Date()); fileDao.save(myFile); } catch (Exception e) { e.printStackTrace(); } return "redirect:queryAll"; }
二、springmvc的文件下载
1、使用FileUtils.readFileToByteArray(要下载的文件File对象)读取要下载文件的数据到字节数组。
2、通过HttpHeaders指定下载文件的其他相关信息,如:下载的文件名,以什么方式下载:
hearders.setContentDispositionFormData("attachment", "下载的文件名");
hearders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
3、创建ResponseEntity对象,springmvc使用ResponseEntity将数据发给浏览器。
// 1、第一个参数:指定要发送的数据
// 2、第二个参数:指定HttpHeaders
// 3、第三个参数:指定下载文件的状态,使用HttpStatus来表示
4、返回ResponseEntity对象,springmvc会根据ResponseEntity中的内容实现下载。
//文件下载 // 要返回ResponseEntity @RequestMapping("download") public ResponseEntity download(String fid,String fname,HttpSession session) throws Exception{ // System.out.println("fid=" + fid); fname = new String(fname.getBytes("ISO8859-1"),"UTF-8"); System.out.println("fname=" + fname); // 一、找到要下载文件在web项目中的真实路径 String directory = session.getServletContext().getRealPath("/upload"); String fileName = fname.replace(".", fid + "."); String downFilePath = directory + "/" + fileName; //为要下载的文件创建File对象 File dowmFile = new File(downFilePath); try { // 读取要下载文件中的内容 // readFileToByteArrayt用来将File对象读成字节数组 // 到此为止,准备好了要下载的数据 byte[] barr = FileUtils.readFileToByteArray(dowmFile); // 二、指定下载文件的其他相关数据(如:下载文件的文件名称....) // 这些信息在springmvc中封装成了HttpHeaders对象 HttpHeaders hearders = new HttpHeaders(); //1、指定下载文件的文件名称 // setContentDispositionFormData("下载形式,attachment表示以附件形式") hearders.setContentDispositionFormData("attachment", new String(fname.getBytes("UTF-8"),"ISO8859-1")); //2、指定以二进制流的方式将字节数组发送给浏览器 hearders.setContentType(MediaType.APPLICATION_OCTET_STREAM); //三、将数据发给浏览器 // springmvc是使用ResponseEntity将数据发给浏览器的 // 1、第一个参数:指定要发送的数据 // 2、第二个参数:指定HttpHeaders // 3、第三个参数:指定下载文件的状态,使用HttpStatus来表示 return new ResponseEntity(barr, hearders, HttpStatus.CREATED); } catch (Exception e) { e.printStackTrace(); } System.out.println(downFilePath); return null; }

浙公网安备 33010602011771号