總結springMVC 文件下載 參考版

網上找了,百度了幾種方式, 總結一下,下面這種,我認爲是比較好的。前端

固然能夠 使用springMVC 的 那種簡潔方式,但是不夠原生,看起來不容易明白。nginx

因此下面這樣的方式 就比較 簡潔,而又容易理解,解決原生。spring

//下載績效操做手冊
    @RequestMapping("/down/pfmceplan.do")
    public String downPfmceplan(HttpServletRequest request,HttpServletResponse response) throws Exception{
        
        String fileName="績效操做shouceV1.0.zip";
        //解決中文丟失問題
        String fileNameHeader=new String(fileName.getBytes(), "ISO-8859-1");
        
        response.reset();
        response.setCharacterEncoding("utf-8");
        
        response.setContentType("application/octet-stream; charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename="
                + fileNameHeader);
        
        String path = Thread.currentThread().getContextClassLoader()
                .getResource("").getPath();
        
        // 求出 根項目的路徑
      String pathRealroot=path.substring(0, path.lastIndexOf("WEB-INF"))+"assets/"+"download/";        
        File downPath=new File(pathRealroot
                +File.separator + fileName);
        
        System.out.println("=================>>>>>>>>>>>>>>>"+downPath);
        
        OutputStream os = response.getOutputStream();apache

        // FileUtils 來自 apache 的開源 common包tomcat

      //   org.apache.commons.io.FileUtils 引入 該包調該方法便可服務器


        os.write(FileUtils.readFileToByteArray(downPath));
        os.flush();
        os.close();
        
        return null;
        
    }app

這裏的文件是固定死了, 同理 若是是 前端 傳過來也是同樣的道理。 圖片

要求不高的 文件下載,能夠 在springMVC 中,將其設置爲 靜態文件,相似 image 圖片,js的同樣,過濾權限,能夠直接訪問,便可實現下載了,這裏不對其說明。ip

可是這樣的方式,訪問的時候該文件名就不能帶有中文的。utf-8

若是須要帶中文 能夠在 服務器裏面 tomcat 或者 nginx  配置一下 請求的字符集,

好比 tomcat的 

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" 
               URIEncoding="utf-8" 
               redirectPort="8443" />

這樣 就能夠 支持 包含中文名稱的文件名稱 下載了  。

相關文章
相關標籤/搜索