java - Domino Web-agent 中的 OutputStream 无法正确写入数据

标签 java lotus-domino outputstream agents

在 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/

相关文章:

java - Raspberry Pi MAX31865 Python 到 Java 的转换

twitter-bootstrap - 未获取 OpenNTF 项目 : Bootstrap for XPages to work

lotus-notes - Lotus Notes 自定义查看收到的邮件

java - OutputStream 和 Writer 有什么区别?

java - 从 XML 文件中提取字数统计

java - Android 和 Guice - 注入(inject)通用类型类?

java - 如何从字符串写入二进制文件并将其再次检索到字符串?

java - 通过套接字 java 的 CipherOutputStream

java - OpenCV : Converting a float array into Mat

lotus-notes - LotusScript: getItemValue ("Body") 将段落分成几行