0
像我有一些Java代碼獲取不過是從數據庫中的圖像並將其保存到一個文件,當我在所有的程序中打開它,但Photoshop中我得到類似的錯誤:的PostgreSQL正從數據庫
「它可能已損壞或使用Preview無法識別的文件格式。」 - 這個特別的是來自MAC上的預覽。我從中提取的數據庫是PostgreSQL,列是bytea。
我的代碼如下:
public static void main(String[] args) throws Exception {
Connection conn = null;
try {
conn = ConnectionManager.getConnection();
String sql = "SELECT content from asset ";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();
while (resultSet.next()) {
File image = new File("/Users/esklein/testing"+UUID.randomUUID()+".jpg");
FileOutputStream fos = new FileOutputStream(image);
byte[] buffer = new byte[256];
//
// Get the binary stream of our BLOB data
//
InputStream is = resultSet.getBinaryStream("content");
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}
這是爲什麼不隨地吐痰可以在任何文件中打開圖像的任何想法?謝謝
你是積極的圖像是一個JPG? Photoshop可能會打開它,因爲它足夠聰明,可以根據類型檢查文件格式,而不必像大多數圖像查看器那樣依賴擴展名。除此之外,如果您在每次寫入後都未清除緩衝區,則可能會在文件末尾發生垃圾。當最後一次迭代讀取少於256字節時會發生什麼?來自上一次讀取的剩餘字節可能仍然在緩衝區中,並在文件結尾處作爲垃圾寫出。再次,photoshop可能足夠聰明,可以忽略其他觀衆無法看到的地方。 – Jberg 2011-04-28 18:16:12
1.你確定它是一個JPEG文件嗎?看看第一個字節,它應該包含一個「JFIF」字符串 2.你可以測試該文件的大小是否與數據庫中的數據長度相同? 'select octet_length(...)' – leonbloy 2011-04-28 18:17:13