6

今天我遇到了 PrimeFaces FileUpload 的问题。它工作得很好,但是文件存储在 JBoss 的临时目录中,所以每当我重新部署应用程序或只是将源提交到 svn 时,我上传的所有图像都消失了。所以想问一下,有没有办法把图片保存到war项目的“源”目录下。

我的 handleFileUpload 方法:

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);
        }
    }

编辑:另一个问题

我的视图文件:

<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>

当我将 update="messages" 添加到 fileUpload 我得到

javax.servlet.ServletException: null source

每当我尝试使用 fileUpload 打开页面时。你不知道如何摆脱它吗?

4

1 回答 1

1

如果需要,您可以在中配置上传目录web.xml

<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>
于 2010-12-05T11:28:45.017 回答