1. 程式人生 > 實用技巧 >springmvc檔案下載實現

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

}