我有一些Java代码从数据库获取图像并将其保存到文件中,但是,当我在所有程序中打开它但Photoshop时出现类似的错误:
“它可能已损坏或使用预览无法识别的文件格式。” - 这个特写是来自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();
}
}
}
为什么这不是一个可以在任何文件中打开的图像?感谢
答案 0 :(得分:3)
while (is.read(buffer) > 0) {
您假设读取操作始终填充整个缓冲区。但是如果数据大小是1001字节,并且缓冲区大小是1000字节,那么最后一次读取将只获得一个字节。您需要检查实际读取的字节数,然后
fos.write(buffer, 0, bytesRead)