我在使用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());
答案 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>