Как сохранить изображение, взятое из браузера в базу данных mysql, используя struts 2 и hibernate

Привет, я создаю динамический веб-проект, в котором на странице приветствия есть strat2 файл-тег, теперь я хочу сохранить указанный файл в базу данных mysql, чтобы кто-то мне помог...

Заранее спасибо.

Вот код, который я разработал, но он принимает параметр файла статически, означает, что я указываю путь. но он должен пройти путь от тега файла struts 2, см. класс java и получите его.

public class FileUploadACtion 
{

 public String execute() throws IOException
{
System.out.println("Hibernate save image into database");
 Session session = HibernateUtil.getSessionFactory().openSession();

 session.beginTransaction();

 //save image into database
 File file = new File("C:\\mavan-hibernate-image-mysql.gif");
 byte[] bFile = new byte[(int) file.length()];

 try {
 FileInputStream fileInputStream = new FileInputStream(file);
 //convert file into array of bytes
 fileInputStream.read(bFile);
 fileInputStream.close();
 } catch (Exception e) {
 e.printStackTrace();
 }

 FileUpload tfile = new FileUpload();
 avatar.setImage(bFile);

 session.save(tfile);

 //Get image from database
 FileUpload tfile2 = (FileUpload)session.get(FileUpload.class,FileUpload.getAvatarId());
 byte[] bAvatar = avatar2.getImage();
 try{
 FileOutputStream fos = new FileOutputStream("C:\\test.gif"); 
 fos.write(bAvatar);
 fos.close();
 }catch(Exception e){
 e.printStackTrace();
 }

 session.getTransaction().commit();
}

}

2 ответа

Вы должны хранить изображение в таблице как тип BLOB. Допустим, у вас есть класс Person с image человека, хранящегося в БД. Если вы хотите сопоставить это, просто добавьте в свой объект POJO свойство, содержащее изображение.

@Column(name="image")
@Blob
private Blob image;

Когда вы его отобразите, преобразуйте его в byte[] и покажите.

private byte[] toByteArray(Blob fromImageBlob) {
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 try {
 return toByteArrayImpl(fromImageBlob, baos);
 } catch (Exception e) {
 }
 return null;
 }



private byte[] toByteArrayImpl(Blob fromImageBlob, 
 ByteArrayOutputStream baos) throws SQLException, IOException {
 byte buf[] = new byte[4000];
 int dataSize;
 InputStream is = fromImageBlob.getBinaryStream(); 

 try {
 while((dataSize = is.read(buf)) != -1) {
 baos.write(buf, 0, dataSize);
 } 
 } finally {
 if(is != null) {
 is.close();
 }
 }
 return baos.toByteArray();
 }

Вы можете увидеть приведенные ниже примеры, чтобы узнать больше об этом.

  1. http://i-proving.com/space/Technologies/Hibernate/Blobs+and+Hibernate
  2. http://snehaprashant.blogspot.com/2008/08/how-to-store-and-retrieve-blob-object.html
  3. http://viralpatel.net/blogs/2011/01/tutorial-save-get-blob-object-spring-3-mvc-hibernate.html


Ну, вам не нужно делать это вручную, и когда вы будете использовать Struts2 для загрузки файла, его сборщик в перехватчике файлов-загрузчиков сделает для вас большой взлет. Все, что вам нужно указать некоторые свойства в вашем классе действий, чтобы Framework ввела требуемые данные в ваш класс действий, и вы можете выполнить другую работу.

вот что вам нужно сделать. На странице JSP вам нужно использовать

<s:form action="doUpload" method="post" enctype="multipart/form-data">
 <s:file name="upload" label="File">
 </s:file></s:form>

Перехватчик fileUpload будет использовать инсталляцию setter для вставки загруженного файла и связанных с ним данных в ваш класс Action. Для поля формы с именем upload вы предоставите три метода сеттера, показанные в следующем примере: И в вашем классе действий это все, что вам нужно сделать

public class UploadAction extends ActionSupport {
 private File file;
 private String contentType;
 private String filename;

 public void setUpload(File file) {
 this.file = file;
 }

 public void setUploadContentType(String contentType) {
 this.contentType = contentType;
 }

 public void setUploadFileName(String filename) {
 this.filename = filename;
 }

 public String execute() {
 //...
 return SUCCESS;
 }
 }

Загруженный файл будет рассматриваться как временный файл с длинным случайным именем файла, и вы должны скопировать его в свой метод execute() класса action.You можете воспользоваться помощью FileUtils.

Я предлагаю вам прочитать официальный файл загрузки файлов Struts2 для полной конфигурации Struts2 Загрузка файлов

licensed under cc by-sa 3.0 with attribution.