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

    }

  • 相关阅读:
    订阅发布模式概念基础
    HTML与CSS之display:none
    HTML与CSS之导航栏
    微信小程序-笔记
    基于设计模式的用户管理
    微信小程序-开发组件-笔记1
    JavaScript异常处理
    微信小程序开发-笔记
    封装类实现增删改查
    脚本方式实现数据库增删改查
  • 原文地址:https://www.cnblogs.com/blogcpp/p/13377574.html
Copyright © 2020-2023  润新知