Вот последний код.Я хотел попробовать что-то другое, но я все еще получаю те же результаты.
Я использую Postgres DB, и я создал столбец с именем file с типом данных bytea.Изображение действительно загружается в базу данных (я вижу его там, когда я просматриваю данные таблицы).
Я пробовал это с несколькими изображениями.Размер кажется правильным при загрузке, но при загрузке он удваивается.(что разрушает изображение).
Любая помощь в том, почему это не работает, очень ценится.
public void uploadImage(File image, String imageName) throws SQLException {
try {
conn = connectionManager.ConnectToDb();
String sql = "INSERT INTO images (name, file) "+ "VALUES(?,?)";
System.out.println("your image name is " + imageName);
System.out.println("Uploaded image name is " + image);
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,imageName);
fis = new FileInputStream(image);
stmt.setBinaryStream(2, fis, (int) image.length());
System.out.println("Image SIZE = " +image.length());
stmt.execute();
conn.commit();
} catch (SQLException e) {
System.out.println("Could not insert into DB");
e.printStackTrace();
} catch (FileNotFoundException e) {
System.out.println("Could not insert into DB");
e.printStackTrace();
}
finally {
//close DB Objects
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
conn.close();
}
}
public void downloadImageFromDB(String imagename) throws SQLException
{
ConnectionManager connectionManager = new ConnectionManager();
try {
conn = connectionManager.ConnectToDb();
Statement downloadImageStatement = conn.createStatement();
downloadImageStatement.executeQuery("SELECT file FROM images WHERE name = '"+imagename+"'");
ResultSet rs = downloadImageStatement.getResultSet();
int i=1;
InputStream in = null;
int returnValue = 0;
if(rs.next())
{
String len1 = rs.getString("file");
int len = len1.length();
byte [] b = new byte[len];
in = rs.getBinaryStream("file");
int index = in.read(b, 0, len);
OutputStream outImej = new FileOutputStream("C:\\EclipseProjects\\StrutsHelloWorld\\"+imagename+".JPG");
while (index != -1)
{
outImej.write(b, 0, index);
index = in.read(b, 0, len);
System.out.println("==========================");
System.out.println(index);
System.out.println(outImej);
System.out.println("==========================");
}
outImej.close();
}else
{
returnValue = 1;
}
downloadImageStatement.close();
conn.close();
} catch (SQLException e) {
System.out.println("Could not get image from DB");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
// close db objects.
conn.close();
}
//return imgData;
}