Avatar billede rmjdk Nybegynder
12. oktober 2007 - 12:58 Der er 7 kommentarer

Upload af fil via JSF

Jeg vil kunne uploade en fil fra klienten (max er ca 100mb, typisk mindre) til serveren. Det skal ske i et JSF view. Jeg har haft kig på nogle eksempler hvor der bruges JSP/Servlet men kan ikke lige gennemskue om de virker i JSF.


På forhånd tak!
Avatar billede arne_v Ekspert
12. oktober 2007 - 15:24 #1
En JSP style form, som POST'er til en servlet der redirecter tilbage til en JSF URL
boer virke.

Men de fleste JSF implementationer har mig bekendt en upload komponent. Hvilken JSF
implementation bruger du ?
Avatar billede rmjdk Nybegynder
12. oktober 2007 - 15:40 #2
Det første forslag forstod jeg ikke så meget af, desværre - kan du uddybe?

Jeg bruger bare JSF Core og JSF HTML som er standard i JDeveloper.

Der findes nogle ADF Faces komponenter i JDeveloper som har en inputFile komponent, men jeg ville gerne holde mig til standard JSF komponenter.
Avatar billede arne_v Ekspert
13. oktober 2007 - 04:05 #3
f.eks. Jakarta Commons FileUpload

Eksempel:

<form action="UploadServlet" enctype="multipart/form-data" method="post">
Fil: <input type="file" name="fil"/><br/>
<input type="submit" value="Submit"/>
</form>

og så i UploadServlet:

DiskFileUpload upload = new DiskFileUpload();
List files = upload.parseRequest(request);
for(int i = 0; i < files.size(); i++) {
  FileItem file = (FileItem)files.get(i);
  if(file.getFieldName().equals("fil")) {
      String filename = "C:\\test.upl";
      file.write(new File(filename));
  }
}

plus en redirect til den relevante JSF side.
Avatar billede rmjdk Nybegynder
14. oktober 2007 - 14:09 #4
Jeg har leget lidt med ADF's inputFile komponent, men det spiller ikke helt.

I JSF siden ligger inputFile komponenten, dens value sættes til en UploadedFile i min backingbean. Sammen med den er der en knap der kalder en metode i backingbeanen, doUpload().
Når jeg prøver at uploade, laver den den rigtige fil det rigtige sted, men filen er altid 1 byte stor, og indeholder én karakter, nemlig den første karakter i filen jeg vil uploade.
Eksempel: Jeg vil uploade test.txt som indeholder teksten "hej", så laver den en fil test.txt der indeholder "h".

Metoden ser således ud:

    public String doUpload() {
        context = FacesContext.getCurrentInstance();
       
        if (getFile() == null)  {
            FacesMessage msg = new FacesMessage("Error occured!");
            context.addMessage(null, msg);
            return "";
        }
        System.out.println(getFile().getFilename());

        FileInputStream in;
        FileOutputStream out;
        String toPath = "C:\\temp\\";
        File outFile = new File(toPath + "/" + getFile().getFilename());

        try {
            in = new FileInputStream((File)getFile());
            out = new FileOutputStream(outFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage("Error uploading...");
            context.addMessage(null, msg);
            return "";
        }

        try {
            int bytesRead = 0;
            byte[] readBuffer = new byte[1024];
           
            while ( (bytesRead = in.read(readBuffer)) != -1)  {
                out.write(readBuffer, 0, bytesRead);
            }
           
            in.close();
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage("Error uploading2...");
            context.addMessage(null, msg);
            return "";
        }
       
        FacesMessage msg = new FacesMessage("File uploaded...");
        context.addMessage(null, msg);
       
        return "";
    }

Hvad gør jeg galt ?
Avatar billede rmjdk Nybegynder
06. november 2007 - 10:53 #5
smid svar arne
Avatar billede arne_v Ekspert
06. november 2007 - 15:38 #6
OK

du fik det til at virke ?
Avatar billede arne_v Ekspert
26. november 2007 - 21:54 #7
saa mangler du bare at acceptere
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester