IBM Domino サーバー (Win32 プラットフォームのバージョン 8.5.3FP1) には、要求に応じて PDF ファイルと RTF ファイルを生成するための 2 つの Web エージェントがあります。
すべてのエージェントは 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\"");
私の質問は次のとおりです。私のアプローチの何が問題になっていますか?ここで何が間違っていますか?ファイルが作成され、サーバーに正しく保存されます。出力ストリームが正しく開かれ、ファイルが正しく読み取られました。出力ストリームに書き込む場合、例外はありません。出力ストリームがフラッシュされ、正しく閉じられました。
なにが問題ですか?私は一日中これを解決しようとしていますが、手がかりが見つかりませんでした.
何か案は?