在 IBM Domino Server(Win32 平台上的 8.5.3FP1 版本)上有两个 Web 代理,用于根据请求生成 PDF 和 RTF 文件。
每个代理在临时文件夹中生成 RTF 或 PDF 文件,然后打开OutputStream
实例以将此文件写入客户端(浏览器,当保存文件对话框出现时)。
一切正常。文件生成并正确保存在临时文件夹中。但是将这些文件写入OutputStream让用户将其保存到本地磁盘,它不能正常工作。一些文件写入正常(小文件,~11Kb),但较大的文件,~34K 被部分保存(有时保存 276 字节,有时保存 4K 字节等)。
我在代理中得到 OutputStream,如下所示:
final OutputStream os = this.getAgentOutputStream();
生成并保存文件时,我使用:
final FileInputStream fis = new FileInputStream(pdfFilePath);
IOUtils.copy(fis, os); // it is from Apache Commons IOUtils
fis.close();
不工作。
然后我改用这种方式:
final byte[] resultArray = FileUtils.readFileToByteArray(new File(pdfFilePath)); // result array has correct length and correct contents
os.write(resultArray);
os.flush();
os.close();
不工作。
然后我改用这种方式(很棘手,但仅用于实验目的):
final byte[] resultArray = FileUtils.readFileToByteArray(new File(pdfFilePath)); // result array has correct length and correct contents
for (byte a:resultArray) {
os.write(a);
}
os.flush();
os.close();
做。不是。工作。
在将数据发送到输出流之前,我调用了:
java.io.PrintWriter pw = this.getAgentOutput();
pw.println("Content-type: application/pdf"); // also tried octet-stream, no effect
pw.println("Content-Disposition: attachment; filename=\"file.pdf\"");
伙计们,我的问题如下。我的方法有什么问题?我在这里做错了什么?文件已正确创建并保存在服务器上。输出流正确打开,文件正确读取。当我写入输出流时也不例外。输出流已正确刷新和关闭。
怎么了?我一整天都在尝试解决这个问题,但我没有找到任何线索。
有任何想法吗?