我嘗試使用java.sql.PreparedStatement
更新pdf文件到mysql
使用以下代碼的Blob字段。使用java.sql.PreparedStatement將PDF文件上傳到MySQL BLOB,但不會損壞
File inFile = new File("Path+BLOCK.pdf");
byte[] b = new byte[(int)inFile.length()];
PreparedStatement psmnt = (PreparedStatement)
con.prepareStatement("INSERT INTO
2012DOC (SRNO,DOCUMENT)
VALUES (?,?)"
); //con is java.sql.Connection object
psmnt.setString(1, "1200021");
psmnt.setBytes(2, b);
psmnt.executeUpdate();
此代碼的執行沒有錯誤和數據庫顯示BLOB的內容,但是當我嘗試使用下面的代碼來檢索文件,它提供了腐敗的文件,該文件無法打開。
ResultSet rs=con.Execute("SELECT DOCUMENT FROM 2012DOC");
rs.next();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=kjsahkjd.pdf");
java.sql.Blob blob = rs.getBlob("DOCUMENT");
ServletOutputStream servletOutputStream = response.getOutputStream();
InputStream in = blob.getBinaryStream();
int length = (int) blob.length();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while ((length = in.read(buffer)) != -1) {
servletOutputStream.write(buffer, 0, length);
}
in.close();
servletOutputStream.flush();
servletOutputStream.close();
它輸出與原文件大小相同的文件,但文件未打開。 pdf
閱讀器被解僱,但無法打開文件,並給出錯誤「該文件已損壞或不支持文件類型」
我也有這樣那樣的問題。你能指定*不打開*嗎? PDF閱讀器被解僱但無法顯示文件?或者瀏覽器不能結束下載? – Raffaele
PDF閱讀器被解僱但無法打開文件。讀者給出錯誤「該文件已損壞或不支持文件類型」 –
沒有可重複的測試用例,我們只能嘗試猜測以減少問題。我認爲你的第一次嘗試應該是比較原始文件和數據庫內容,看看它們是否真的是二進制平等的。驅動程序是官方的MySQL Connector/J,不是嗎? – Raffaele