我正在使用JAVA HttpServlets在Eclipse中开展动态工作项目。
我有一些byte []格式的数据,我正在通过一些API调用。我可以将它存储在一个新文件中,但我想要的是用户可以使用不同的格式下载,如csv,xls,pdf。
我提到了一些链接。我使用saveReportToLocalMachine方法来保存它 这工作正常。 但是,如果我将displayReportToUser用于相同的byte []数据,它会创建一个可下载的文件,但该文件显示已损坏的错误。
public static void saveReportToLocalMachine(byte[] data, String fileLocation,
String filename) throws IOException {
File file = new File(fileLocation, filename);
FileOutputStream fstream = new FileOutputStream(file);
fstream.write(data);
fstream.close();
}
现在,下面是使文件可下载的方法。
private void displayReportToUser(byte[] byteData, String outputType,
HttpServletResponse resp) throws IOException {
resp.setContentType("application/pdf");
resp.setHeader("Content-Disposition","attachment;filename=temp.pdf");
ServletOutputStream out = resp.getOutputStream();
out.write(byteData);
out.flush();
out.close();
}
但这不适合我。 有人可以指导和解释吗? 请指出错误
答案 0 :(得分:1)
while(in.read(outputByte, 0, 4096) != -1)
{
out.write(outputByte, 0, 4096);
}
你忽略了计数。 Java中的correc copy循环如下:
int count;
while((count = in.read(outputByte)) > 0)
{
out.write(outputByte, 0, count);
}
在关闭之前,您无需刷新out
。
但是,由于您将数据设为byte[],
,因此您只需拨打out.write(data).
即可完全不需要ByteArrayInputStream,
或循环。