2014-04-16 42 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?