在JAVA中如何将byte []数据发送到可下载文件?

时间:2013-11-22 04:59:55

标签: java servlets bytearray outputstream

我正在使用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();

}

但这不适合我。 有人可以指导和解释吗? 请指出错误

1 个答案:

答案 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,或循环。