как сохранить изображение, взятое из браузера в базе данных MySQL, используя Struts 2 и Hibernate - PullRequest
0 голосов
/ 02 февраля 2012

Привет, я создаю динамический веб-проект, в котором страница приветствия имеет тег файла struts2. Теперь я хочу сохранить указанный файл в базе данных 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 ]

0 голосов
/ 03 февраля 2012

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

- вот что вам нужно сделать. На своей странице JSP вынеобходимо использовать <s:file> tag

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

Перехватчик fileUpload будет использовать инъекцию сеттера для вставки загруженного файла и связанных данных в ваш класс 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 () класса действий. Вы можете воспользоваться помощью FileUtils .

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

0 голосов
/ 02 февраля 2012

Вы должны хранить изображение в таблице как тип 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 + и + 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...