我有一个servlet,可以将文件下载到请求的客户端。现在当用户请求下载一个xml文件时。它将开始下载,当它完成文件时看起来不完整。它遗漏了文件末尾的一些数据。
我的代码如下:
File file = new File(location);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=" + fileName);
FileInputStream fileIn = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
int length = -1;
//copy binary contect to output stream
while((length = fileIn.read(outputByte)) > 0)
{
out.write(outputByte);
}
fileIn.close();
out.flush();
out.close();
我的代码在哪里无法下载完整的xml文件?
答案 0 :(得分:2)
像这样改变你的while循环。缓冲区大小为4096.您应该只使用先前read()中读取的长度。
//copy binary contect to output stream
while((length = fileIn.read(outputByte)) > 0)
{
fileOut.write(outputByte, 0, length);
}
但是,您应该使用Guava ByteStreams来实现此目的。您也可以找到其他支持此功能的库。