使用Primefaces上传文件的问题

时间:2014-05-30 12:28:15

标签: jsf primefaces upload glassfish

我尝试在我的webApplication中插入下载。

首先,包含

上的表格的页面
citizen/createparty.xhtml

我想上传文件的文件夹是

partysymbols/ ..

然后我向您展示XHTML代码:

<h:form enctype="multipart/form-data">
     <p:fileUpload value="#{partyCreationBean.file}" mode="simple" />
     <p:commandButton value="Submit" ajax="false" actionListener="#{partyCreationBean.upload}" />

然后是partyCreationBean

private UploadedFile file;

public UploadedFile getFile() {
    return file;
}

public void setFile(UploadedFile file) {
    this.file = file;
}
....
public void handleFileUpload() {
        File target = new File(FacesContext.getCurrentInstance().getApplication().get);
        System.out.println("handle file upload: " + file.getFileName());
        InputStream inputStream;
        try {
            inputStream = file.getInputstream();
        OutputStream out = new FileOutputStream(file.getFileName()
                );
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }
        inputStream.close();
        out.flush();
        out.close();
        System.out.println("done");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}
public void upload() {
    if(file != null) {
        FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, message);
        handleFileUpload();
    }
}

在我的web.xml中

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>
        org.primefaces.webapp.filter.FileUploadFilter
    </filter-class>
    <init-param>
        <param-name>thresholdSize</param-name>
        <param-value>51200</param-value>
    </init-param>
    <init-param>
        <param-name>uploadDirectory</param-name>
        <param-value>partysymbols</param-value>
    </init-param>
</filter>

问题是我到了

的System.out.println(&#34;完成&#34)

但我不知道文件的上传位置。

然后,如果我理解了&#34; uploadDirectory&#34; web.xml中的参数不是设置文件设置的目录。

我真的不明白如何做这些事情,也因为我第一次使用web应用程序,而且我使用glassfish,我不知道文件系统应该如何工作......我的意思是......我不知道现实中的页面和所有东西......我只知道它们在日食中的位置:/

提前多多谢谢你 Samuele

1 个答案:

答案 0 :(得分:1)

我猜你的handleFileUpload()方法存在错误:

该行

OutputStream out = new FileOutputStream(file.getFileName());

应该是:

OutputStream out = new FileOutputStream(target.getAbsolutePath() + file.getFileName());

这也应该是文件最终存储的路径,您可以使用以下命令打印它:

System.out.println("Path: " + target.getAbsolutePath() + file.getFileName());

在您的代码中初始化target var的行似乎错过了一些内容,但我猜它会从uploadDirectory中检索web.xml个参数。

您可能需要在uploadDirectory中设置"c:\\tmp\\partysymbols" param的绝对路径,例如"/home/user/partysymbols"(Windows)或web.xml(Unix)。

另见: