2014-04-16 82 views
0

需要一個servlet從像/ home/Bureau這樣的路徑下載一個文件..在jee gwt 我用這個但是不工作 我去了下載所有文件的類型圖像需要一個servlet從像/ home /局的路徑下載文件

String filePath = request.getParameter("file"); 
    String fileName = "test"; 
FileInputStream fileToDownload = new FileInputStream(filePath); 
    // ServletOutputStream output = response.getOutputStream(); 
    response.setHeader("Content-Type", "image/png"); 
     //response.setContentType("image/png"); 
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + ".png\""); 
//      response.setContentLength(fileToDownload.available()); 

    int readBytes = 0; 
    byte[] buffer = new byte[10000]; 
    while ((readBytes = fileToDownload.read(buffer, 0, 10000)) != -1) { 
     //output.write(readBytes); 
     response.getOutputStream().write(readBytes); 
    } 

    response.getOutputStream().close(); 
    fileToDownload.close(); 
    fileToDownload.close(); 

回答

1

問題出在你寫下字節數不是實際字節的下面一行。這裏readBytes表示一次讀取的字節數,其中buffer包含讀取的實際字節。

response.getOutputStream().write(readBytes); 

嘗試

OutputStream outputStream = response.getOutputStream(); 

while ((readBytes = fileToDownload.read(buffer)) != -1) { 
    outputStream.write(buffer,0,readBytes); 
} 

outputStream.close(); 

我建議你打電話response.getOutputStream()一次。

您的代碼會給你IndexOutOfBoundsException如果文件的大小是因爲小於10000個字節以下行

fileToDownload.read(buffer, 0, 10000) 

將其更改爲

fileToDownload.read(buffer) 

使用ServletContext獲取文件路徑。

ServletContext context = getServletContext(); 

欲瞭解更多信息看看下面的帖子:

Writing image to servlet response with best performance

How do I return an image from a servlet using ImageIO?