SpringMvc 中的文件上传与下载

2019-01-10  本文已影响0人  Zak1

文件上传与下载

文件上传

  1. jar包
   <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
   <dependency>
       <groupId>commons-fileupload</groupId>
       <artifactId>commons-fileupload</artifactId>
       <version>1.3.3</version>
   </dependency>
  1. 文件上传解析器mvc.xml中注册

    <!-- 文件解析器 id必须如下multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="102400000"></property>
        <property name="maxUploadSizePerFile" value="2000000"></property>
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>
    
  2. 文件提交页面

    • 注意enctype="multipart/form-data"
    <form action="${webpath}/test/p9" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="file"><br>
                <input type="submit" value="上传">
    </form>
    
    • 多文件

      <form action="${webpath}/test/p10" method="post" enctype="multipart/form-data">
          文件:<input type="file" name="file"><br>
          文件:<input type="file" name="file"><br>
          <input type="submit" value="上传">
      </form>
      
  3. Controller

   //File.separator保证了在各类系统下分隔符不出错
   private final static String uploadfilepath="E:"+File.separator;
   @RequestMapping("/p9")
   public String upload(@RequestParam("file") MultipartFile multipartFile, Model model) throws IOException {
       if (multipartFile!=null && !multipartFile.isEmpty()){
           //获取源文件名
           String originalfilename = multipartFile.getOriginalFilename();
           //取得文件名前缀
           String fileNamePrefix = originalfilename.substring(0, originalfilename.lastIndexOf("."));
           //格式化获取时间
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
           //创建新文件名
           String newfilename = fileNamePrefix + sdf.format(new Date())+originalfilename.substring(originalfilename.lastIndexOf("."));
           File file = new File(uploadfilepath + newfilename);
           //执行上传操作
           multipartFile.transferTo(file);
           System.out.println(file.getAbsolutePath());
           model.addAttribute("filename", newfilename);
       }
       return "uploadsuccess";
   }

文件下载

 private final static String downloadpath="E:"+File.separator;
    @RequestMapping("/download")
    public String download(HttpServletResponse response){
        //定义该文件名
        String filename="gakki.jpg";
        //获取该文件的路径
        Path path = Paths.get(downloadpath, filename);
        if (Files.exists(path)){
            //获取文件类型名,从'.'后面一位获得
            String filesuffix=filename.substring(filename.lastIndexOf(".")+1);
            //设置contenttype,只有这样才能下载
            response.setContentType("application/"+filesuffix);
            //添加头部信息,注意字符编码
            try {
                response.addHeader("Content-Disposition","attachment;filename="+new String(filename.getBytes("UTF-8"),"ISO8859-1"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //通过path进行下载,outputStream使用response.getOutputStream
            try {
                Files.copy(path, response.getOutputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
上一篇下一篇

猜你喜欢

热点阅读