在 IBM Domino 服务器(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\"");
各位,我的问题如下。我的方法有什么问题吗?我在这里做错了什么?文件已正确创建并保存在服务器上。输出流正确打开,文件读取正确。当我写入输出流时,没有异常(exception)。输出流正确刷新并关闭。
出了什么问题?我一整天都在试图解决这个问题,但没有找到线索。
有什么想法吗?
最佳答案
Domino 似乎在代理 OutputStream 方面存在错误。通过 agentRef.getAgentOutputStream();
获取的流无法正常工作并执行部分写入。
我决定将文件附加到 NotesDocument 实例,保存它并向用户提供指向本文档中附加文件的链接,而不是使用这种方式。
关于java - Domino Web-agent 中的 OutputStream 无法正确写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013188/