Извлечение файла из bytea в PostgreSQL с использованием Java
Привет, я использую приведенный ниже код, чтобы получить файл из байта postgresql, используя Java, но внутри файла я получаю числа, такие как 314530413142313141
File file = new File("c:/test.doc");
FileOutputStream fos = new FileOutputStream(file);
ResultSet rs = st.executeQuery("SELECT * FROM test_bytea where id=" + 1);
if (rs != null) {
while (rs.next()) {
byte[] fileBytes = new byte[1024];
InputStream is = rs.getBinaryStream("type_file");
while (is.read(fileBytes) > 0) {
fos.write(fileBytes);
}
// use the stream in some way here
}
rs.close();
}
Пожалуйста, дайте мне знать, что не так в моем коде?
2 ответа
Решение
Данные экранируются (начинаются с \x и затем представляют собой шестнадцатеричные два символа для каждого байта), это то, что выходит из поля bytea. Вы должны удалить его перед сохранением в файле.
Вместо того, чтобы делать это вручную, вы можете использовать Spring
:
ResultSet rs = st.executeQuery("SELECT * FROM test_bytea where id=" + 1);
if (rs != null) {
LobHandler lobHandler = new DefaultLobHandler();
byte[] myFile = lobHandler.getBlobAsBytes(rs, "type_file"));
//....