Question

Good day to all!

I've been making a simple web Application using Netbeans, JSF and Primefaces that can upload .csv, .jpeg/.jpg and .pdf files. I made 2 folders which was stored in drive C: (uploaded folder and tmp folder).

I assigned the "uploaded" folder to where the uploaded files are stored and the "tmp" for the .tmp of the uploaded files. I've been through many question threads and video tutorial which I followed correctly.

I also downloaded the commons fileupload and commons io and added it to the library. It is working fine, it displays that it is uploading and even saw the .tmp file on the folder i assigned it to.

But I cannot see the uploaded files on my "uploaded" folder. So, my question is, How can I upload these files into my "uploaded" folder.

Here are my codes:

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui">

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h:form enctype="multipart/form-data" >  

        <p:fileUpload fileUploadListener="#{FileUploadControl.fileUploadControl}"  
                      mode="advanced"  
                      update="messages"  
                      auto="true"  
                      sizeLimit="10000000"   
                      allowTypes="/(\.|\/)(gif|jpe?g|csv|pdf)$/"
                      />  

        <!-- -->

        <p:growl id="messages" showDetail="true"/>  
    </h:form> 
</h:body>
</html>    

FileUploadControl.java

package controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.UploadedFile;


@ManagedBean
@SessionScoped
public class FileUploadControl implements Serializable {

private String destination = "C:\\uploaded\\";
private UploadedFile file;

public UploadedFile getFile() {
    return file;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

public FileUploadControl() {
}

public void TransferFile(String fileName, InputStream in) {
    try {
        OutputStream out = new FileOutputStream(new File(destination + fileName));
        int reader = 0;
        byte[] bytes = new byte[(int) getFile().getSize()];
        while ((reader = in.read(bytes)) != -1) {
            out.write(bytes, 0, reader);
        }
        in.close();
        out.flush();
        out.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

public void upload() {
    String extValidate;
    if (getFile() != null) {
        String ext = getFile().getFileName();
        if (ext != null) {
            extValidate = ext.substring(ext.indexOf(".")+1);
        } else {
            extValidate = "null";

            if (extValidate.equals("pdf")) {
                try {
                    TransferFile(getFile().getFileName(), getFile().getInputstream());
                } catch (IOException ex) {
                         Logger.getLogger(FileUploadControl.class.getName()).log(Level.SEVERE, null, ex);
                    FacesContext context = FacesContext.getCurrentInstance();
                    context.addMessage(null, new FacesMessage("Wrong", "Error Uploading     file..."));
                }
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Succesful",     getFile().getFileName() + "is uploaded."));
            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Wrong_ext", "only extension .pdf"));
            }
        }
    } else {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Wrong", "Select File!"));
    }
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!--File upload commons -->
<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>C:\tmp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!--File upload commons -->

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>



<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>

Thank you for your response and help. looking forward to it!

Était-ce utile?

La solution

The main reason it's failing as at now is that you haven't bound the value attribute to your backing bean variable, so getFile() will always return null and upload will do nothing.

You're still probably not going to get any results because it appears that you're trying to combine two different modes of operation of the <p:fileUpload/> component.

  1. Simple mode

    • You don't define a fileUploadListener
    • You define a value attribute on the component and bind to the UploadedFile type attribute in your backing bean (which you have)
  2. Advanced mode

    • You don't define a value attribute
    • You define a fileUploadListener which is bound to a method in your backing bean (which you also have)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top