6

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
  • 153
  • 1
  • 2
  • 5

1 Answers1

1

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>
Vladimir Ivanov
  • 42,730
  • 18
  • 77
  • 103
  • 1
    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. – El_w Dec 05 '10 at 13:23
  • 2
    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). – Piotr Gwiazda Jan 13 '12 at 13:57