zoukankan      html  css  js  c++  java
  • SpringMVC文件下载

    文件上传完毕返回页面用Model对象带回filename,在webapps的该应用目录下,已经存在上传文件。

    页面

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html>
     4 <html>
     5 <head>
     6 <meta charset="UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <h2>用户注册</h2>
    11     <form action="register" enctype="multipart/form-data" method="post">
    12         <table>
    13             <tr>
    14                 <td>用户名:</td>
    15                 <td><input type="text" name="username"></td>
    16             </tr>
    17             <tr>
    18                 <td>请上传头像:</td>
    19                 <td><input type="file" name="image"></td>
    20             </tr>
    21             <tr>
    22                 <td><input type="submit" value="注册"></td>
    23             </tr>
    24         </table>
    25     </form>
    26     
    27     <script type="text/javascript">
    28         function test() {
    29             var filename = document.getElementById("filename");
    30             alert(encodeURIComponent(filename));
    31         }
    32     </script>
    33     
    34     <h3>文件下载</h3>
    35     <a href="javascript:window.location.href='download?filename=' + 
    36         encodeURIComponent('${requestScope.filename }')">
    37         ${requestScope.filename }
    38     </a>
    39 </body>
    40 </html>

    文件上传与下载

    SpringMVC提供了一个ResponseEntity类型,使用它可以很方便定义返回的BodyBuilder、HttpHeaders、HttpStatus。

     2     public String register(HttpServletRequest request, @ModelAttribute User user, Model model) throws IllegalStateException, IOException {
     3         System.out.println(user.getUsername());
     4         // 如果上传文件部位空,写入上传文件路径
     5         if (!user.getImage().isEmpty()) {
     6             // 上传路径
     7             String path = request.getServletContext().getRealPath("/images");
     8             // 上传文件名
     9             String filename = user.getImage().getOriginalFilename();
    10             File filepath = new File(path, filename);
    11             // 判断路径是否存在,不存在就创建一个
    12             if (!filepath.getParentFile().exists()) {
    13                 filepath.getParentFile().mkdirs();
    14             }
    15             // 将上传文件保存到一个目标文件中
    16             user.getImage().transferTo(new File(path + File.separator + filename));
    17             // 将文件名保存到model中
    18             model.addAttribute("filename", filename);
    19             System.out.println("文件上传路径:" + (path + File.separator + filename));
    20             return "userInfo";
    21         } else {
    22             return "error";
    23         }
    24     }
    25         
    26     @RequestMapping(value="/download")
    27     public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename,
    28             @RequestHeader("User-Agent") String userAgent) throws IOException {
    29         // 下载文件的路径
    30         String path = request.getServletContext().getRealPath("/images");
    31         // 构建File
    32         File file = new File(path + File.separator + filename);
    33         // ok表示http请求中状态码200
    34         BodyBuilder builder = ResponseEntity.ok();
    35         // 内容长度
    36         builder.contentLength(file.length());
    37         // application/octet-stream 二进制数据流(最常见的文件下载)
    38         builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
    39         // 使用URLEncoding.decode对文件名进行解码
    40         filename = URLEncoder.encode(filename, "UTF-8"); 
    41         // 根据浏览器类型,决定处理方式
    42         if (userAgent.indexOf("MSIE") > 0) {
    43             builder.header("Content-Disposition", "attachment; filename=" + filename);
    44         } else {
    45             builder.header("Content-Disposition", "attacher; filename*=UTF-8''" + filename);
    46         }
    47         return builder.body(FileUtils.readFileToByteArray(file));
    48     }

    FileUtils类是Apache Commons FileUpload组件,用于读取文件,并将其构建为ResponseEntity对象。

  • 相关阅读:
    3.2.2.5 BRE运算符优先级
    随机场(Random field)
    D-Separation(D分离)-PRML-8.22-Graphical Model 五 18 by 小军
    CVPR 2013 关于图像/场景分类(classification)的文章paper list
    Introduction to One-class Support Vector Machines
    SVM学习资料
    MIT牛人解说数学体系
    牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法
    牛顿法与拟牛顿法学习笔记(四)BFGS 算法
    牛顿法与拟牛顿法学习笔记(三)DFP 算法
  • 原文地址:https://www.cnblogs.com/alphajuns/p/11067912.html
Copyright © 2011-2022 走看看