2011-12-30 63 views
1

像我有我正在轉換爲byte[]並保存在數據庫中,而在該文件中有UI文件鏈接的用戶點擊下載,下載我寫了一個方法字節[]爲下載

一個圖像文件
public void downloadDeclarationForm(HttpServletRequest request, 
             HttpServletResponse response) throws IOException { 
    int payrollId = RequestUtils.getBrowsePayroll(request); 
    Payroll payroll = itConfigManager.getObjectOrNull(Payroll.class, payrollId); 
    int year = payrollManager.getYear(payroll.getFromDate()); 
    int id = NumberUtils.toInt(request.getParameter("id")); 
    try { 
     byte[] byteBuf = itConfigManager.getDeclarationFormBytes(id, year); 
     ControllerUtils.writeFileUploadHeaders(response, 
           itConfigManager.getFileName(id, year), byteBuf.length); 
     //response.setContentType("image/jpeg"); 
     OutputStream stream = new ByteArrayOutputStream(); 

     response.getOutputStream().write(byteBuf); 
     response.getOutputStream().flush(); 
     response.getOutputStream().close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     response.getOutputStream().print(
       "Error while fetching attachment.."); 
    } finally { 
     response.getOutputStream().close(); 

    } 

} 

,而我的下載鏈接,點擊它打開下載窗口,甚至在該窗口中的文件名來正確與正確的擴展名,但它不是打開該文件,如果我保存該文件保存到磁盤,然後嘗試打開它不開放誰能幫我 ?

回答

2

你必須設置響應頭 - 內容類型,Conent,長度和內容處置。

例如,

response.setContentType("application octet-stream"); 
response.setHeader("Content-Length",String.valueOf(byteBuf.length)); 
response.setHeader("Content-Disposition", "attachment; filename=sample.png"); 
2

的setContentType應該取消註釋和參數應該是正確的。例如,類型是'gif',它應該是response.setContentType("image/gif");。您需要確保您在那裏設置了正確的圖像類型。

如果你不知道你做了什麼文件類型,你可以使用的ImageIO類。這裏是關於ImageIO的討論。 How to use ImageIO to get image type and image byte array