需要一个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();
答案 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();
欲了解更多信息,请查看以下帖子: