问题描述
需要一个servlet从路径下载文件,如/ home / Bureau ..在jee gwt
我使用这个但不工作
,我去下载所有文件的类型图像
Need a servlet to download a file from path like /home/Bureau.. in jee gwtI used this but isn't workand I went to download all file's type image
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();
推荐答案
问题出在下面你写的不是的字节不是实际的字节。这里 readBytes
表示一次读取的字节数,因为 buffer
包含读取的实际字节。
The problem is at below line where you are writing no of bytes not actual bytes. Here readBytes
represents no of bytes read at a time where as buffer
contains actual bytes that is read.
response.getOutputStream().write(readBytes);
尝试
Try
OutputStream outputStream = response.getOutputStream();
while ((readBytes = fileToDownload.read(buffer)) != -1) {
outputStream.write(buffer,0,readBytes);
}
outputStream.close();
我建议您致电 response.getOutputStream()
单次。
您的代码将给您 IndexOutOfBoundsException
如果文件的大小小于10000字节,因为
Your code will give you IndexOutOfBoundsException
if the size of the file is less than 10000 bytes because of below line
fileToDownload.read(buffer, 0, 10000)
将其更改为
fileToDownload.read(buffer)
使用 ServletContext
获取文件路径。
ServletContext context = getServletContext();
有关更多信息,请查看以下帖子:
For more info have a look at below posts:
。
这篇关于需要servlet从/ home / Bureau等路径下载文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!