Announcement

Collapse
No announcement yet.

fileupload weiterverarbeiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • fileupload weiterverarbeiten

    Guten morgen zusammen,

    ich möchte gerne hochgeladene Bilder direkt nach dem Upload weiter verwenden.
    Das Problem ist, dass das Bild erst nach erneutem Deployen benutzt werden kann.

    Momentan werden die Bilder in ein Unterverzeichnis von public_html geladen,
    wenn ich im Verzeichnis per Explorer gucke, sind die Bilder auch vorhanden, sie liegen aber wahrscheinlich nicht im WebLogicServer (bzw. Tomcat) Cache.. kommt das hin?

    Und auf andere Verzeichnisse außerhalb des Projekts hat der Server kein Zugriff..

    Wie kann ich den Fileupload trotzdem realisieren?
    Hier ist mal ein Mustercode:

    Code:
    package test;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.IOException;
     
    import java.util.ArrayList;
     
    import javax.faces.event.ValueChangeEvent;
     
    import org.apache.myfaces.trinidad.model.ChildPropertyTreeModel;
    import org.apache.myfaces.trinidad.model.UploadedFile;
    import javax.faces.application.FacesMessage;
    import javax.faces.context.FacesContext;
    import javax.faces.event.ValueChangeEvent;
    import org.apache.myfaces.trinidad.model.UploadedFile;
     
     
    public class bt {
      private String img = "/img/flagge_de.jpg";
      
        public void setImg(String img) {
            this.img = img;
        }
     
        public String getImg() {
            return img;
        }
      
      public void upload(ValueChangeEvent vc) throws IOException {
        UploadedFile file = (UploadedFile)vc.getNewValue();
        String save = "";
        String[] filenameArray = new String[6];
        if (file != null) {
            int n = 0;
            InputStream is = file.getInputStream();
            File f = new File("D:\\uni\\SS10\\webdev\\testJSF\\Project1\\public_html\\img");
            if (!f.isDirectory()) 
                f.mkdir();
            String dir = "D:\\uni\\SS10\\webdev\\testJSF\\Project1\\public_html\\img" ;
            String fileName =  file.getFilename();
            
            save = dir + (File.separator) + fileName;
            FileOutputStream fos = new FileOutputStream(save);
           
              img = "/img/" + fileName;
              this.setImg(img);
              System.out.println(img);
            
            
     
            try {
                //die Datei wird auf den Server geschrieben
                while ((n = is.read()) >= 0)
                    fos.write(n);
            } catch (IOException e) {
                System.out.println("Error: " + e.getMessage());
                e.printStackTrace();
            }
        }
      }
        
      
      }
    Angezeigt werden soll das:

    Code:
          <tr:form usesUpload = "true">
              <tr:inputFile label = "Upload demo" valueChangeListener= "#{bt.upload}"/>
              <tr:commandButton text="Go"/>
            </tr:form>
              
              <tr:image source="#{bt.img}"/>

    Wie gesagt, wenn ich ein Bild auswählt, welches bereits auf dem Server liegt, zeigt er es direkt an. Wenn das Bild noch nicht im Verzeichnis liegt, lädt er es korrekt hoch, angezeigt kann es aber erst werden, wenn ich neu deploye..


    Kann mir vielleicht jemand nen Tipp geben?

    Da das mein erster Post ist, wünsche ich uns ein freundliches Miteinander


    Vielen Dank


    ps: bitte nicht wunder, den Thread findet man auch ohne Beteiligung hier wieder...

  • #2
    Welches Recht hat die Datei nach dem Upload?
    Christian

    Comment


    • #3
      alles Nutzer/Gruppen haben voll Zugriff.
      Kenn mich da aber auch mit Windows nicht gut genug aus.

      Unter welchem Nutzer läuft denn der Applikationsserver standardmäßig?


      Ciao

      Comment


      • #4
        Obiger Code zeigt das Abspeichern der Datei. Wie greifst du auf das Bild zu?
        bt-Klasse?
        Christian

        Comment


        • #5
          Code:
          <tr:image source="#{bt.img}"/>
          die Varibale img enthält den Pfad.
          Nach dem Hochladen wird diese sofort gesetzt.

          Aktuell führt er ins Projekt. Wenn ich den Pfad außerhalb liegen lasse, "komme" ich nicht an die Bilder ran (wahrscheinlich fehlende Rechte oder so)

          Comment


          • #6
            Das ist nicht die Klasse (Bean), sondern der JSF-Code

            Aktuell führt er ins Projekt. Wenn ich den Pfad außerhalb liegen lasse, "komme" ich nicht an die Bilder ran (wahrscheinlich fehlende Rechte oder so)
            Nein, jeder Webserver verbietet einen Zugriff außerhalb des Document-Root. Sonst könnte u.U. ein externer Zugriff auf Dateien des Servers erfolgen. Ein Zugriff
            <tr:image source="d:\a\b\c.."/>
            würde also immer verboten sein
            Christian

            Comment


            • #7
              okay. gut.

              Dann weiß ich Bescheid und verfolge diesen Ansatz nicht mehr
              ich setze die Variable img ganz normal per setter
              -> this.setImg(img);

              Comment

              Working...
              X