j2ee primefaces fileupload file saving destination

17,182

You can configure upload directory in the web.xml if you want.

<filter>
  <filter-name>PrimeFaces FileUpload Filter</filter-name>
  <filter-class>
    org.primefaces.webapp.filter.FileUploadFilter
  </filter-class>
  <init-param>
    <param-name>uploadDirectory</param-name>
    <param-value>/Users/primefaces/temp</param-value>
  </init-param>
</filter>
Share:
17,182
El_w
Author by

El_w

Updated on July 21, 2022

Comments

  • El_w
    El_w almost 2 years

    Today I've got a problem with the PrimeFaces FileUpload. It works nice, but the files are stored in JBoss' temporary directory so whenever I redeploy the application or just commit the sources to svn, all of the images I uploaded are gone. So I wanted to ask, whether there is a way to save the images to the "source" directory of the war project.

    My handleFileUpload method :

    public String getUrlBase() {
        return FacesContext.getCurrentInstance().getExternalContext().getRealPath("//upload");
    }
    
    public void handleFileUpload(FileUploadEvent event) {
            new File(getUrlBase() + "/" + album.getId()).mkdirs();
            File result = new File(getUrlBase() + "/" + album.getId() + "/" + event.getFile().getFileName());
    
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(result);
    
                byte[] buffer = new byte[BUFFER_SIZE];
    
                int bulk;
                InputStream inputStream = event.getFile().getInputstream();
                while (true) {
                    bulk = inputStream.read(buffer);
                    if (bulk < 0) {
                        break;
                    }
                    fileOutputStream.write(buffer, 0, bulk);
                    fileOutputStream.flush();
                }
    
                fileOutputStream.close();
                inputStream.close();
    
                FacesMessage msg = new FacesMessage("Succesful",
                        event.getFile().getFileName() + " is uploaded.");
                FacesContext.getCurrentInstance().addMessage(null, msg);
    
            } catch (IOException e) {
                e.printStackTrace();
                FacesMessage error = new FacesMessage("The files were not uploaded!");
                FacesContext.getCurrentInstance().addMessage(null, error);
            }
        }
    

    EDIT: another issue

    my view file:

    <h:form enctype="multipart/form-data" prependId="false">
            <p:growl id="messages" showSummary="true" showDetail="true" />
            <p:fileUpload fileUploadListener="#{photo.handleFileUpload}"
                          update="messages"  sizeLimit="1073741824"
                          multiple="true" label="choose" allowTypes="*.jpg;*.png;*.gif;"
                          description="Images" />
        </h:form>
    

    When I add update="messages" to the fileUpload I get

    javax.servlet.ServletException: null source
    

    whenever I try to just open the page with the fileUpload. Don't you know how to get rid of it?

  • El_w
    El_w over 13 years
    According to the use guide, this is just a place, where temporary files are stored. I need to have some images uploaded and then to display them in a photo gallery...so I would like to store them in "upload" directory in the web root (where eg. WEB-INF directory is). So when I commit the source to svn, other people will have the pictures in the gallery too. I've tried setting the uploadDIrectory to /upload but that doesn't seem to work.
  • Piotr Gwiazda
    Piotr Gwiazda over 12 years
    Don't keep uploaded images in source folders. Never (are you comming from PHP background?). Keep them somwhere on the disk. If you want to share them with other developers - keep them in database (for small files it is a good choice).