Web 下載圖片為空白

來源:互聯網
上載者:User

標籤:分享   read   inpu   str   寫檔案   路徑   alt   last   技術分享   

問題描述:
檔案下載功能是web開發中經常使用到的功能,使用HttpServletResponse對象就可以實現檔案的下載。但是下載任務正常進行,下載下來的圖片卻是空

問題代碼:
        //從伺服器下載一張圖片                //建立位元組讀取流 從本地讀取圖片        //擷取圖片路徑        ServletContext context = this.getServletContext();        String path= context.getRealPath("WEB-INF/classes/德拉科.jpg");        FileInputStream fis = new FileInputStream(path);                //建立位元組輸出資料流 將圖片發送給用戶端        ServletOutputStream sos = response.getOutputStream();        //處理下載檔案名稱        String fileName = path.substring(path.lastIndexOf("\\")+1);        //處理檔案名稱中文亂碼問題        String name = URLEncoder.encode(fileName, "utf-8");        //通知瀏覽器以下載的方式開啟檔案        response.setHeader("content-disposition", "attachment;filename="+name);        response.setHeader("content-type", "image/jpeg");                //建立字元數組        byte[] arr = new byte[1024];        int len = 0;        if((len = fis.read(arr)) != -1)        {            sos.write(arr, 0, len);        }                fis.close();        sos.close();
問題分析:
首先,圖片成功儲存到本地,說明通過response設定header進行下載是可行的,那麼,圖片內容為空白只能是讀寫時出現問題仔細檢查,發現在讀寫部分將while寫成了if,導致,寫檔案只在第一次有效,之後無法寫入
 問題解決:
將if改為while 
        //從伺服器下載一張圖片                //建立位元組讀取流 從本地讀取圖片        //擷取圖片路徑        ServletContext context = this.getServletContext();        String path= context.getRealPath("WEB-INF/classes/德拉科.jpg");        FileInputStream fis = new FileInputStream(path);                //建立位元組輸出資料流 將圖片發送給用戶端        ServletOutputStream sos = response.getOutputStream();        //處理下載檔案名稱        String fileName = path.substring(path.lastIndexOf("\\")+1);        //處理檔案名稱中文亂碼問題        String name = URLEncoder.encode(fileName, "utf-8");        //通知瀏覽器以下載的方式開啟檔案        response.setHeader("content-disposition", "attachment;filename="+name);        response.setHeader("content-type", "image/jpeg");                //建立字元數組        byte[] arr = new byte[1024];        int len = 0;        while((len = fis.read(arr)) != -1)        {            sos.write(arr, 0, len);        }                fis.close();        sos.close();

 問題總結:
      //處理下載檔案名稱        String fileName = path.substring(path.lastIndexOf("\\")+1);        //處理檔案名稱中文亂碼問題        String name = URLEncoder.encode(fileName, "utf-8");

//通知瀏覽器以下載的方式開啟檔案 response.setHeader("content-disposition", "attachment;filename="+name); response.setHeader("content-type", "image/jpeg");

src下檔案的路徑問題
  Web工程的根目錄指的是WebRoot/WEB-INF/classes開始的。java的class檔案只能讀到這個目錄的的檔案。如果想讀取其他地方的檔案,可以用絕對路徑。
  如果是通過java的class讀檔案,比如“德拉科”.jpg,只能放到WebRoot/WEB-INF/classes目錄下。也就是放到工程src下,會自動編譯到WebRoot/WEB-INF/classes目錄下的

 

參考連結:http://blog.csdn.net/zhangqindabendan/article/details/53002544

Web 下載圖片為空白

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.