Search code examples
jpafile-uploadrichfacesseam

How to upload image to database using Richfaces and JPA


I am developing a web app on JBOSS AS 7 using Richaces 4, SEAM and JPA. I can not get rich:fileUpload working. I have no idea how to make it. When uploading image through rich:fileUpload, I need it to be inserted into the database. What I did right now:

  1. I have an .xhtml page where there is a form for Uploading files (used one from Richfaces demo);
  2. Created an entity bean UploadedImage.java (with @Lob annotation for image column);
  3. DAO class to persist uploadedimage using entitymanager;
  4. And UploadBean.java for view to connect it with EJB project;

Solution

  • If anyone will have the same issue, here is how to get it working:

    Upload.xhtml (contains form for image upload):

    <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}"
                            stopButtonClass="file-upload-stop-button"
                            addButtonClass="file-upload-button" listHeight="0" listWidth="0"
                            id="upload" acceptedTypes="jpg, gif, png, bmp" allowFlush="true" maxFileQuantity="10">
                            <a4j:ajax event="uploadcomplete" execute="@none"
                                render="info, imgs" />
                        </rich:fileUpload>
    

    FileUploadBean.java (delivering data to ejb class):

    @Named()
    @RequestScoped
    public class FileUploadBean implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
    
        @Inject
        private CMSDao cms;
    
        private Integer pid;
        private String name;
        private String aname;
        private byte[] data;
    
    
        public FileUploadBean() {}
        private ArrayList<UploadedImage> files = new ArrayList<UploadedImage>();
        private List<UploadedImage> filess;
    
        public void listener(FileUploadEvent event) throws Exception {
                UploadedFile item = event.getUploadedFile();
                UploadedImage file = new UploadedImage();
                file.setName(item.getName());
                file.setData(item.getData());
                files.add(file);
                cms.insertImg(file);
    
            }
        //getters and setters
    

    EJB class:

      public void insertImg(UploadedImage img)  {
                em.persist(img);
                em.flush();
            }
    

    UploadedImage.java (entity bean):

    @Entity
    @Table(name="photo")
    public class UploadedImage implements Serializable {
        private static final long serialVersionUID = -8192553629588066292L;
        @Id
        @GeneratedValue
        @Column(name="pid")
        private Integer pid;
        @Column(name="name")
        private String name;
        @Column(name="aid")
        private String aname;
        @Lob
        @Column(name="data")
        @Basic(fetch = FetchType.LAZY)
        private byte[] data;
    // getters and setters