如何使用<p:fileupload> </p:fileupload>获取文件的完整路径

时间:2014-06-26 16:39:57

标签: jsf file-upload primefaces

我在使用primefaces组件上传文件的fullPath时遇到问题。这是我的代码:

 <h:form prependId="false" enctype="multipart/form-data">
    <p:fileUpload update="@form" mode="advanced" auto="true" 
        fileUploadListener="#{myBean.myFileUpload}"/>
    <h:outputText value="#{myBean.fileName}"/>    
</h:form>     

@ManagedBean
@SessionScoped
public class MyBean {
        private String fileName; 
        public void myFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        fileName = event.getFile().getFileName();
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

} 

我只得到文件的名称,但我真正想要得到的是完整的路径。 我已经尝试过了,但它没有显示任何内容。

fileName = FilenameUtils.getFullPath(event.getFile().getFileName());

2 个答案:

答案 0 :(得分:2)

您对上传文件的fullPath有何期待?浏览器向您发送了一些字节,它们位于servlet容器的内存中,无处存储。没有像/var/tmp/myfile.txt这样的完整路径。

答案 1 :(得分:-3)

试试这个:

String fileName  = event.getFile().getFileName();
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String newFileName = servletContext.getRealPath("") + File.separator + "upload" +    File.separator+ fileName;

其中“upload”必须替换为主要面的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>/upload</param-value>
    </init-param>
</filter>