【问题标题】:how to get a file's full path using <p:fileUpload>如何使用 <p:fileUpload> 获取文件的完整路径
【发布时间】:2014-06-26 16:39:56
【问题描述】:

我在获取使用 primefaces 组件上传的文件的完整路径时遇到问题。这是我的代码:

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

【问题讨论】:

标签: jsf file-upload primefaces


【解决方案1】:

您希望上传文件的完整路径是什么?浏览器向您发送了一些字节,它们位于 servletcontainer 的内存中,并且没有存储在任何地方。没有像/var/tmp/myfile.txt 这样的完整路径。

【讨论】:

  • 在客户端有。这就是 OP 想要传递的内容。
【解决方案2】:

试试这个:

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

其中“上传”必须替换为 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多