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>;
        }
    }
    

    }

  • 相关阅读:
    51单片机寄存器组的设置(转)
    51单片机堆栈深入剖析(转)
    do{...}while(0)的妙用(转)
    优化C/C++代码的小技巧(转)
    Struts2返回json
    详略。。设计模式1——单例。。。。studying
    [深入理解Android卷一全文-第十章]深入理解MediaScanner
    《python源代码剖析》笔记 Python虚拟机框架
    jQuery Validation让验证变得如此easy(三)
    mysql高可用架构方案之中的一个(keepalived+主主双活)
  • 原文地址:https://www.cnblogs.com/blogcpp/p/13377574.html
Copyright © 2011-2022 走看看