Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 使用primefaces将图像上载到web.xml中的路径集_File Upload_Jsf 2_Primefaces - Fatal编程技术网

File upload 使用primefaces将图像上载到web.xml中的路径集

File 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

我在这里查阅了有关stackoverflow在primefaces中上传图像的大部分帖子。有了这个帮助,我已经能够将一个图像上传到一个在代码中静态指定的目标路径,如本文所示。这个很好用

但是,我希望将图像上载到web.xml中指定的设计路径。这是因为我希望即使在部署应用程序之后,路径也是可配置的。当我使用ServletContext#getRealpath()时,返回路径在myProject文件夹中,但我希望目标路径完全位于项目外部,因为我发现它是最好的方法。e、 g e:/myUploads

这是我的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>
我希望将上传的图像保存在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);
}