需要一个servlet从/ home / Bureau这样的路径下载文件

时间:2014-04-16 13:10:26

标签: java java-ee servlets gwt download

需要一个servlet从jee gwt中的/ home / Bureau ..这样的路径下载文件 我用过这个但不行 然后我去下载所有文件的类型图像

 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 个答案:

答案 0 :(得分: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()

如果文件大小小于10000字节,你的代码会给你IndexOutOfBoundsException,因为下面的行

 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?