File upload 使用primefaces将图像上载到web.xml中的路径集
我在这里查阅了有关stackoverflow在primefaces中上传图像的大部分帖子。有了这个帮助,我已经能够将一个图像上传到一个在代码中静态指定的目标路径,如本文所示。这个很好用 但是,我希望将图像上载到web.xml中指定的设计路径。这是因为我希望即使在部署应用程序之后,路径也是可配置的。当我使用ServletContext#getRealpath()时,返回路径在myProject文件夹中,但我希望目标路径完全位于项目外部,因为我发现它是最好的方法。e、 g e:/myUploads 这是我的web.xmlFile upload 使用primefaces将图像上载到web.xml中的路径集,file-upload,jsf-2,primefaces,File Upload,Jsf 2,Primefaces,我在这里查阅了有关stackoverflow在primefaces中上传图像的大部分帖子。有了这个帮助,我已经能够将一个图像上传到一个在代码中静态指定的目标路径,如本文所示。这个很好用 但是,我希望将图像上载到web.xml中指定的设计路径。这是因为我希望即使在部署应用程序之后,路径也是可配置的。当我使用ServletContext#getRealpath()时,返回路径在myProject文件夹中,但我希望目标路径完全位于项目外部,因为我发现它是最好的方法。e、 g e:/myUploads
<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>E:/myUploads</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<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>
</filter>
<context-param>
<param-name>uploadDirectory</param-name>
<param-value>E:/myUploads</param-value>
</context-param>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
我希望将上传的图像保存在E:/myUploads中,而不必说:
String destPath = "E:\\myUploads\\" + uploadedFile.getFileName();
如果您也能告诉我如何使用
<p:graphicImage
对于上载的文件大于配置的阈值大小的情况,uploadDirectory
初始化参数表示临时文件存储位置。配置的目录不打算作为永久文件存储位置。它将在您无法控制的时刻自动清洗
完全去掉它,而是创建一个独立的上下文参数
<context-param>
<param-name>uploadDirectory</param-name>
<param-value>E:/myUploads</param-value>
</context-param>
您确实不应该使用getRealPath()
。顺便说一句,当另一个用户碰巧上载了一个文件名相同的文件时,您已经遇到了另一个潜在问题。您可以使用File#createTempFile()
自动生成具有固定前缀/后缀的唯一文件名。另请参见。巴卢斯克的回答对我帮助很大。。再次感谢巴卢斯克。如果有人对最终的代码感兴趣,这里是
Am使用工具Netbeans 7.4、Primefaces 4.0、GlassFish 3.1.2
这是我的上传表格
<h:form enctype="multipart/form-data">
<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" mode="advanced" dragDropSupport="false"
update="messages" sizeLimit="100000" fileLimit="3" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
<p:messages id="messages" showDetail="true"/>
</h:form>
我的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>E:/myUploads</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<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>
</filter>
<context-param>
<param-name>uploadDirectory</param-name>
<param-value>E:/myUploads</param-value>
</context-param>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
}
这很有效。祝你一切顺利。让我用这个来问你一些问题。我可能是非职业性的,但我会感激你的回应。我知道你在这里最擅长给出正确的答案。你能和我分享一下你做了什么来确保你知道大部分事情吗。我当然佩服你。什么原则指导你的知识库,你使用什么材料?你对很多事情都有很深的了解,但有些人总是知道表面信息。我是一个JavaEE,JPA,Primefaces爱好者,u是我的动力,我崇拜的人和我经常谈论的例子。。。在x之前,我确实复制了复制代码,但是这一行FileUtils.copyInputStreamToFile(inputStr,destFile)
找不到方法copyInputStreamToFile
import
org.apache.commons.io.FileUtils;使用commons-io-2.4 Netbeans 7.4、Primefaces 4.0和GlassFish 4.0
<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>
</filter>
<context-param>
<param-name>uploadDirectory</param-name>
<param-value>E:/myUploads</param-value>
</context-param>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
@ManagedBean(name = "fileUploadController")
@ViewScoped
public class FileUploadController {
public void handleFileUpload(FileUploadEvent event) {
//get uploaded file from the event
UploadedFile uploadedFile = (UploadedFile) event.getFile();
//create an InputStream from the uploaded file
InputStream inputStr = null;
try {
inputStr = uploadedFile.getInputstream();
} catch (IOException e) {
//log error
}
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
String directory = externalContext.getInitParameter("uploadDirectory");
String filename = FilenameUtils.getName(uploadedFile.getFileName());
File destFile = new File(directory, filename);
//use org.apache.commons.io.FileUtils to copy the File
try {
FileUtils.copyInputStreamToFile(inputStr, destFile);
} catch (IOException e) {
//log error
}
FacesMessage msg = new FacesMessage(event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}