0

i have a project which was working perfectly three months ago, just opened it up, and now i can not get the file upload working, i am unsure of what the issue is, any one got any ideas?

the file upload, triggers the upload window that allows a user to select a file, but from then onwards nothing happens, it should display a message to the user to say if successful or not, these do not appear

here is the JSF page :

  <p:fileUpload widgetVar="upload" id="upload" fileUploadListener="#{fileUploadController.handleFileUpload}"
                                  mode="advanced" 
                                  multiple="false" 
                                  update="messages Nav upload fileDirectoryViewer"
                                  label="Select File"
                                  sizeLimit="30720000"  
                                  allowTypes="/(\.|\/)(gif|jpe?g|png|doc|txt|pdf|html)$/"
                                  auto="true"
                                  disabled="#{fileUploadController.uploadComplete}"
                                  /> 

and here is the java code :

package richard.fileupload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.primefaces.event.FileUploadEvent;

@ViewScoped
@ManagedBean(name = "fileUploadController")
public class FileUploadController {
//manages all the file upload

    public boolean isUploadComplete() { //to enable the next button once finished
        return uploadComplete;
    }

    public void setUploadComplete(boolean uploadComplete) {
        this.uploadComplete = uploadComplete;
    }

    public boolean isUploadComplete2() {
        //to disable the file upload button, this will stop users uploading multiple files and over writing them as only the last file uploaded will be used
        return uploadComplete;
    }

    public void setUploadComplete2(boolean uploadComplete) {
        this.uploadComplete = uploadComplete;
    }
    /*
     public void handleFileUpload(FileUploadEvent event) {
     System.out.println("called");
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
     FacesContext.getCurrentInstance().addMessage(null, msg);
     }
     }
     */
    //
    //Strings for fileUpload
    //oadProp() 
    //public String fileList = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/Directory Files/directoryFiles.txt"; //
    private Properties configProp = new Properties();

    @PostConstruct
    //System.out.println(destinationPDF);
    //System.out.println(destination);
// Get the username from the login page, this is used to create a folder for each user
    public void loadProp() { //loads the values from the properties fil
        System.out.println("Loading properties");
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties"); //points to a properties file, this will load up destinations instead of having to declare them here
        try {
            configProp.load(in);
            System.out.println(configProp.getProperty("destinationPDF"));//testing to ensure correct variables are loaded
            System.out.println(configProp.getProperty("destination"));//testing to ensure correct variables are loaded
            System.out.println(configProp.getProperty("fileList"));//testing to ensure correct variables are loaded
        } catch (IOException e) {
            e.printStackTrace();
        }
        destination = configProp.getProperty("destination");//Assigning the values to a variable 
        destinationPDF = configProp.getProperty("destinationPDF");//Assigning the values to a variable 
        fileList = configProp.getProperty("fileList");//Assigning the values to a variable 

        System.out.println("called get username");
        username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();//retreives the username from the login page, this is used throughout the application
        //username = "cam01342"; //test
        System.out.println(username);


    }
    //String destinationPDF = configProp.getProperty("destinationPDF"); Always makes a null no idea why yet
    public String destinationPDF; // = configProp.getProperty("destinationPDF");
    public String destination;// = configProp.getProperty("destination");
    private String username;
    public String fileList;
    //public static String destination = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // main location for uploads//TORNADO ONLY //"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // USE ON PREDATOR ONLY 
    public static String NewDestination;
    public static String UploadedfileName;
    public static String CompletefileName;
    //
    //Strings for file copy
    //
    //private String destinationPDF = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"; //USE ON TORNADO//"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/";//USE ON PREDATOR    
    private String NewdestinationPDF;
    public static String PdfLocationViewable;
    private boolean uploadComplete;
    private boolean uploadComplete2;

    //
    public void File() {
        System.out.println("File");
        File theFile = new File(destination + username); // will create a sub folder for each user 
        theFile.mkdirs();
        System.out.println("Completed File");

    }

    public File getDirectory(String destination, String username) {
        System.out.println("called get directory");//testing
        System.out.println(destination);
        // currently not working, is not calling the username or destination
        //set the user directory from the destination and the logged user name
        File directory = new File(destination, username);
        //check if the location exists
        if (!directory.exists()) {
            //Creates folder if it does not already exists
            try {
                directory.mkdir();
            } catch (SecurityException secEx) {
                secEx.printStackTrace(System.out);
                directory = null;
            }
        }
        return directory;
    }

    public void handleFileUpload(FileUploadEvent event) {
        //System.out.println("DesintationPDF : " + destinationPDF);
        System.out.println("called handle file");
        System.out.println("Destination is : " + destination);

        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); //Displays to user on the webpage using AJAX
        FacesContext.getCurrentInstance().addMessage(null, msg);


        try {
            System.out.println("Upload complete value before copy file " + uploadComplete);
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream());


        } catch (IOException e) {
//handle the exception
            e.printStackTrace();
        }

    }

    public void copyFile(String fileName, InputStream in) throws IOException {
        System.out.println("CopyFile");
        try {

            uploadComplete = true; //enables the next button
            uploadComplete2 = false; // to disable the fileupload button
            System.out.println("destination is " + destination);

            System.out.println("upload complete value is : " + uploadComplete);//checkin the value to see if correct
//creates a folder for each user if one does not already exsist, if it does it will use that
//destination = "D:/My Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/";  //for use when on PREDATOR
            // destination = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/"; // main location for uploads (CHANGE THIS WHEN USING PREDATOR)
            File theFile = new File(configProp.getProperty("destination") + "/" + username);
            theFile.mkdirs();// will create a sub folder for each user (currently does not work, below hopefully is a solution) (DOES NOW WORK)
            System.out.println("Completed Creation of folder");
            NewDestination = destination + username + "/";
            System.out.println(NewDestination);//testing


            //Create copy destination
            //creation of directory to use from inside the web app (Needed to display a pdf in the page
            System.out.println("Now in copying of file proccess");
            // destinationPDF = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"; // write the inputStream to a FileOutputStream
            File theFilePDF = new File(configProp.getProperty("destinationPDF") + "/" + username);
            theFilePDF.mkdirs();// will create a sub folder for each user 
            System.out.println("Completed Creation of folder for copy of PDF");
            NewdestinationPDF = configProp.getProperty("destinationPDF") + username + "/";
            System.out.println(NewdestinationPDF);
            System.out.println("End of copying file creation");




// write the inputStream to a FileOutputStream
            OutputStream out = new FileOutputStream(new File(NewDestination + fileName)); // cannot find path when adding username atm
            System.out.println("Called CopyFile"); //testing
            System.out.println(NewDestination + fileName);
            UploadedfileName = fileName;
            CompletefileName = NewDestination + UploadedfileName;
            //Will need to take the uploadfileName and If it is a doc file onvert it
            System.out.println("CompletefileName is: " + CompletefileName);//testing, will pass this value to convertPDF if doc file, This is required.
            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = in.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }

            in.close();
            out.flush();
            out.close();

//make sure new file is created, (displays in glassfish server console not to end user)
            System.out.println("New file created!");//testing
            System.out.println("Completed file name is : " + CompletefileName); //testing as currently gettng a null 


// Now copies the file from one location to another, to display this on the PDF page
            System.out.println("Copying is now happening");
            PdfLocationViewable = "../resources/pdf/" + username + "/" + UploadedfileName; //Must be in this format
            System.out.println(PdfLocationViewable);
            File source = new File(NewDestination);
            File desc = new File(NewdestinationPDF);
            {
                FileUtils.copyDirectory(source, desc);
            }

            // add if statement here to detect if uploaded file is a doc file, If so convert it to pdf, else do nothing
            System.out.println("Determine if a doc file is uploaded");
            if (fileName.endsWith(".doc")) {
                System.out.println("doc file");
                PDFConversion Conversion = new PDFConversion();
                Conversion.Conversion(CompletefileName);
            } else {
                System.out.println("not a doc file uploaded");
            }

        } catch (IOException e) {
            e.printStackTrace();
            FacesMessage error = new FacesMessage("The files were not uploaded!");
            FacesContext.getCurrentInstance().addMessage(null, error);
        }


    }

    public String PdfLocationViewable() {
        System.out.println(PdfLocationViewable);//testing to make sure it is called
        return PdfLocationViewable;
    }

    public String PdfLocationIframe() {
        System.out.println(PdfLocationViewable);
        return PdfLocationViewable;
    }
    /**
     * public String uploadedFilesIframe() { System.out.println(fileList);
     * return fileList; }
     *
     * String newLine = System.getProperty("line.separator"); // puts each
     * result onto a new line
     *
     * public String FilesInFolder() throws IOException { FileWriter fw = new
     * FileWriter(fileList); StringWriter sw = new StringWriter();
     *
     * // Will list all files in the directory, want to create a feature on the
     * page that can display this to the user
     *
     * String path = NewDestination; System.out.println("Starting searching
     * files in directory"); // making sure it is called String files; File
     * folder = new File(path); File[] listOfFiles = folder.listFiles();
     *
     * for (int i = 0; i < listOfFiles.length; i++) {
     *
     * if (listOfFiles[i].isFile()) { files = listOfFiles[i].getName();
     * sw.write(files + newLine);
     *
     * System.out.println(files); } } System.out.println("Saved list of files to
     * " + fileList); fw.write(sw.toString()); fw.close(); return
     * "/GUI/FilesUploaded.xhtml"; }
     */
}

the console has no errors or anything

INFO:   D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/
INFO:   D:/Documents/NetBeansProjects/printing~subversion/fileupload/build/web/resources/Directory Files/directoryFiles.txt
INFO:   called get username
INFO:   null

it looks like it is not going from public void loadProp() to the part that uploads the file

any ideas?

would be amazing to get this back online, the only thing that has changed from last time it was used is i am now using netbeans 7.3.1 where as last time was 7.2 ....

Thanks

1 Answers1

0

This are the answer you need tutorial use p:fileupload

Community
  • 1
  • 1
Mathew Rock
  • 989
  • 2
  • 14
  • 32
  • Whilst this may theoretically answer the question, [it would be preferable](//meta.stackoverflow.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – Kalle Richter Mar 28 '17 at 20:46