0
私はBLOBとして私のPDFファイルを格納するテーブルがあります。 私はInputStreamを取得し、このように挿入します。このためJavaはデータベースからBLOBを取得し、書き込みます
pstmt.setBinaryStream(1, inputStream);
私は、変数としてInteger ID
とInputStream blob;
でモデルを作成しました。
私はこのようなBLOBを自分のDBから読みました。
blob.setBlob(rs.getBinaryStream("blob_file"));
これでもう一度PDFファイルを作成しようとしました。
byte[] buffer = new byte[4096];
File file= new File("c:\\MyPath\\myPDF.pdf");
try{
FileOutputStream output= new FileOutputStream(file);
int b = 0;
while ((b = blob.getBlob().read()) != -1) {
output.write(buffer);
}
output.close();
}catch(IOException ex){
System.err.println("Blob Error: " + ex.getMessage());
}
この方法では、開くことができない破損したPDFファイルを取得します。
私はこのように非常にうまく機能しました。
IOUtils.copy(blob.getBlob(), output);
しかし、なぜ私の最初のバージョンが動作しなかったのか、これらの2つの違いは何ですか?
私はこれがバッファ 'byte [] buffer = new byte [4096];だと思います。それでもあなたのソリューションでは機能しません。バッファの正しい番号を取得するにはどうすればよいですか? – Ovoxo
@Ovoxo良いキャッチ2番目のエラーis.read(バッファ)の代わりにis.read()でした。新しいコードで再試行してください –
完璧な、すべてが機能しました!ありがとうございました! – Ovoxo