下载文件与Tomcat servlet下载不完整

时间:2017-06-28 10:05:12

标签: tomcat servlets download

我有一个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文件?

1 个答案:

答案 0 :(得分:2)

像这样改变你的while循环。缓冲区大小为4096.您应该只使用先前read()中读取的长度。

  //copy binary contect to output stream
  while((length = fileIn.read(outputByte)) > 0)
  {
     fileOut.write(outputByte, 0, length);
  }

但是,您应该使用Guava ByteStreams来实现此目的。您也可以找到其他支持此功能的库。