zoukankan      html  css  js  c++  java
  • springmvc文件下载实现

    springmvc实现文件下载

    使用springmvc实现文件下载有两种方式,都需要设置response的Content-Disposition为attachment;filename=test2.png

    第一种可以直接向response的输出流中写入对应的文件流

    第二种可以使用 ResponseEntity<byte[]>来向前端返回文件

    一、使用response

    
    @RestController
    @RequestMapping("/download")
    public class DownloadController {
    
    <span class="hljs-meta">@RequestMapping</span>(<span class="hljs-string">"/d1"</span>)
    <span class="hljs-function"><span class="hljs-keyword">public</span> ResultVo&lt;String&gt; <span class="hljs-title">downloadFile</span><span class="hljs-params">(HttpServletResponse response)</span></span>{
    
        String fileName=<span class="hljs-string">"test.png"</span>;
        <span class="hljs-keyword">try</span> {
            <span class="hljs-comment">//获取页面输出流</span>
            ServletOutputStream outputStream = response.getOutputStream();
            <span class="hljs-comment">//读取文件</span>
            <span class="hljs-keyword">byte</span>[] bytes = FileUtils.readFileToByteArray(<span class="hljs-keyword">new</span> File(<span class="hljs-string">"D:\my-study\test2.png"</span>));
            <span class="hljs-comment">//向输出流写文件</span>
            <span class="hljs-comment">//写之前设置响应流以附件的形式打开返回值,这样可以保证前边打开文件出错时异常可以返回给前台</span>
            response.setHeader(<span class="hljs-string">"Content-Disposition"</span>,<span class="hljs-string">"attachment;filename="</span>+fileName);
            outputStream.write(bytes);
            outputStream.flush();
            outputStream.close();
            <span class="hljs-keyword">return</span> ResultVoUtil.success(<span class="hljs-string">"success"</span>);
        } <span class="hljs-keyword">catch</span> (IOException e) {
            <span class="hljs-keyword">return</span> ResultVoUtil.error(e);
        }
    
    }
    

    }

    推荐使用这种方式,这种方式可以以json形式给前台返回提示信息。

    二、使用ResponseEntity

    
    @Controller
    @RequestMapping("/download2")
    public class DownloadController2 {
    
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> Logger logger= LoggerFactory.getLogger(CategoryDataController.class);
    
    
    <span class="hljs-meta">@GetMapping</span>(<span class="hljs-string">"/d2"</span>)
    <span class="hljs-keyword">public</span> ResponseEntity&lt;<span class="hljs-keyword">byte</span>[]&gt; download2(){
        <span class="hljs-comment">//获取文件对象</span>
        <span class="hljs-keyword">try</span> {
            <span class="hljs-keyword">byte</span>[] bytes = FileUtils.readFileToByteArray(<span class="hljs-keyword">new</span> File(<span class="hljs-string">"D:\my-study\bill-admin\test2.png"</span>));
            HttpHeaders headers=<span class="hljs-keyword">new</span> HttpHeaders();
            headers.set(<span class="hljs-string">"Content-Disposition"</span>,<span class="hljs-string">"attachment;filename=test2.png"</span>);
            ResponseEntity&lt;<span class="hljs-keyword">byte</span>[]&gt; entity=<span class="hljs-keyword">new</span> ResponseEntity&lt;&gt;(bytes,headers,HttpStatus.OK);
            <span class="hljs-keyword">return</span> entity;
        } <span class="hljs-keyword">catch</span> (IOException e) {
            logger.error(<span class="hljs-string">"下载出错:"</span>,e);
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">null</span>;
        }
    }
    

    }

  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/blogcpp/p/13377574.html
Copyright © 2011-2022 走看看