tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
1435
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ASD20054 ASD20054 ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    49
    hi,

    hat jemand einen Codeschnipsel da wie ich ein Bild mittels multipart/form-data und Get hochladen kann? Das heißt ich habe ein Formular Upload.html was mittels eines Java Server betrieben wird. Nur muss ich halt den Upload Code in die *.java datei schreiben damit er das Bild hochlädt. Kann mir wer weiterhelfen?

    Code :
    1
    2
    3
    4
    
        private void upload() 
        {
                    //hier müsste dann der Code stehen.
        }

    Bitte keine Servlet Beispiele!
     

  2. #2
    Avatar von xardias
    xardias xardias ist offline Mitglied Bronze
    Registriert seit
    Jan 2005
    Beiträge
    35
    Du kannst nicht einfach eine Java Klasse ohne Servlet oder sonstwas aufrufen.
    Warum willst du kein Servlet benutzen? Da heißt die methode dann nicht upload sondern einfach doPost. Du musst entweder ein JSP oder ein Servlet benutzen.
    Und in beiden fällen sollte dir Commons FileUpload hilfreich sein:
    http://jakarta.apache.org/commons/fileupload/
     

  3. #3
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Hallole
    Ich glaube damit jemand Dir eine gute Antwort geben kann, solltest Du vielleicht noch etwas mehr spezifizieren.
    Wenn ich mal so mutmaße möchtest Du einem schon existierenden Server etwas hochladen, richtig? Wie sieht es mit dem Protokoll aus, ist es HTTP oder ist es FTP ?
    Wenn es HTTP ist nehme ich an, dass Du mit dem Schlagwort HTTP-Client weiter kommen könntest. und falls es FTP sein sollte vielleicht mit dem Schlagwort FTP-Client.

    Ist aber nur eine Annahme.

    Takidoso
     

  4. #4
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Zitat Zitat von xardias
    Du kannst nicht einfach eine Java Klasse ohne Servlet oder sonstwas aufrufen.
    Also alles was eine Java-Klasse benötigt um aufgerufen zu werden ist eine main-routine und dann natrülich etwas was die JVM startet und die besagte Klasse 'übergibt' zum Beispiel eine Batch-Datei. Oder bezieht Deine "sonstwas" sich auf diese Möglichkeit?
     

  5. #5
    Avatar von xardias
    xardias xardias ist offline Mitglied Bronze
    Registriert seit
    Jan 2005
    Beiträge
    35
    Sorry, ich Depp habe die Frage etwas falsch verstanden. Ich dachte er wolle den serverseitigen Part des uploads ohne Servlets realisieren.
    Entschuldigt bitte

    Aber um Thema: Ich denke dir sollte Commons HttpClient weiterhelfen: http://jakarta.apache.org/commons/httpclient/
    Damit kannst du jeder beliebigen Java Anwendung mit Zugang zum Internet HTTP anfragen senden und antworten empfangen.
    Speziell diese Beispielanwendung könnte dich Interessieren:
    Geändert von xardias (20.03.06 um 15:44 Uhr)
     

  6. #6
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Hellas!

    Also ich bin so ungeniert und schreib mein Problem jetzt hier an diesem Thread dazu. Ich will nämlich ungefähr das Selbe lösen, also ein Programm/Applet welches Datei(en) an den Server schieckt, mittelst Post. Ich bin auch schon sehr weit nur meine POST Daten werden im PHP Skript (phpinfo()) einfach nicht angezeigt. Es folgt die komplette POST-Anfrage wie sie vom ECHO-Server zurückgegeben wird:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    POST /phpinfo.php HTTP/1.1\r\n
    Content-Type: multipart/form-data; boundary=-----------1234\r\n
    Cache-Control: no-cache\r\n
    Pragma: no-cache\r\n
    User-Agent: Java/1.5.0\r\n
    Host: localhost:80
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n
    Connection: keep-alive\r\n
    Content-Length: 92\r\n
    \r\n
    -----------1234\r\n
    Content-Disposition: form-data; name="test1"\r\n
    \r\n
    Text\r\n
    -----------1234--\r\n
    \r\n

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
                    String boundary = "-----------1234";
     
                    URL url = new URL("http://localhost:7/phpinfo.php");
                    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
                    conn.setDoOutput(true);
                    conn.setUseCaches(false);
     
                    ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
     
                    String content = boundary + "\r\n"
                                     + "Content-Disposition: form-data; name=\"test1\"\r\n"
                                     + "\r\n"
                                     + "Test\r\n"
                                     + boundary + "--\r\n\r\n";
     
                    byte[] bytes = content.getBytes();
     
                    byteStream.write(bytes, 0, bytes.length);
                    byteStream.writeTo(conn.getOutputStream());

    Ich hoffe ihr könnt mir Anhaltspunkte geben....

    lg Billie
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  7. #7
    Avatar von xardias
    xardias xardias ist offline Mitglied Bronze
    Registriert seit
    Jan 2005
    Beiträge
    35
    So direkt kann ich dir da gerade leider nicht helfen. aber vielleicht möchtest du ja commons http client verwenden, welches eigentlich relativ leicht zu verwenden ist:
    http://jakarta.apache.org/commons/ht...ipartpost.html
     

  8. #8
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Also ich werde mir evtl. mal den Source Code ansehen, aber eigentlich das Problem selbst lösen und wissen, warum das so einfach nicht funktioniert. Einfache POST-Anfragen funktionieren, aber was er mir an den Multipart POST Anfragen nicht mag?!
     

  9. #9
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Hab den "Fehler" gefunden. Ich bin auf ungereimtheiten zwischen der Content-Length Angabe von meinem Java Programm und der Angabe von IE gestoßen. Der IE hatte immer um einige Zeichen mehr und die fehlenden Zeichen hab ich gefunden...

    Ich habe ein Boundary definiert "--1234", im der Content-Type Angabe passt dieses Boundary so. Im Content-Teil muss das Boundary nochmal um zwei "--" erweitert werden, also "----1234".

    lg Billie
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  10. #10
    ASD20054 ASD20054 ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    49
    Hallo,
    Sorry für meine wenigen Angaben. Ich kann auf dem Server was ich benutz leider keine Servlets verwenden. Da es ein HTTP Stream Chat Server ist (frettjc) und der keine Servlets unterstützt. Ich habe schon versucht das mit den jakarta commons zu machen doch leider weiss ich nicht wie ich das anstellen soll. Ich möchte das die User ein Bild Uploaden können. Wer sich gern mal den Source Code anschauen möchte , denn kann ich gerne den Chat schicken. Versuch das schon seit einem halben Jahr hinzubekommen doch es wird nichts da mir keiner in den Foren Helfen möchte
     

  11. #11
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Ich hab ein Programm geschrieben, was eigentlich genau das erledigt... du brauchst nur ein PHP Skript, welches dir die Datei am Server entgegen nimmt.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    URL url = new URL("http://localhost:80/upload.php");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    String boundary = "---------------------------" + createBoundary(srcFile.toString());
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    conn.setDoOutput(true);
    conn.setUseCaches(false);
     
    Image img = new ImageIcon(ImageIO.read(srcFile)).getImage();
    BufferedImage outImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
     
    Graphics g = outImg.getGraphics();
    g.drawImage(img, 0, 0, null);
    g.dispose();
     
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
     
    String content = "--" + boundary + "\r\n"
                     + "Content-Disposition: form-data; name=\"upload_file\"; filename=\"" + srcFile.toString() + "\"\r\n"
                     + "Content-Type: image/pjpeg\r\n"
                     + "\r\n";
     
    byte[] bytes = content.getBytes();
     
    byteStream.write(bytes, 0, bytes.length);
    ImageIO.write(outImg, "jpg", byteStream);
     
    content = "\r\n--" + boundary + "\r\n"
            + "Content-Disposition: form-data; name=\"feld\"\r\n"
            + "\r\n"
            + "Inhalt\r\n"
            + "--" + boundary + "--\r\n";
     
    bytes = content.getBytes();
    byteStream.write(bytes, 0, bytes.length);
     
    byteStream.writeTo(conn.getOutputStream());
     
    if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
     
        // HTTP Anfrage erforlgreich abgesetzt
    }

    In PHP würdest du bei phpinfo() die Variablen $_FILES["upload_file"] und $_POST["feld"] sehen. Hier noch die Methode, mit welcher ich mein boundary generiere:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    // benötigt java.security.*; Package
     
        public String createBoundary(String s)
            throws NoSuchAlgorithmException {
     
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(s.getBytes());
            byte[] digest = md.digest();
            String boundary = "";
     
            for(int i = 0; i < digest.length; i++) {
     
                boundary += Integer.toHexString(digest[i] & 0xFF);
            }
     
            return boundary;
        }

    lg Billie

    [edit]Hab den Code für das Vekleinern des Bildes entfernt, bei mir war die Vorgabe Bild hat eine max. Höhe/Breite von 400px und wird automatisch verkleinert und dann erst zum Server geschieckt. Wenn du das Ganze als Applet realisierst, gibt es theoretisch keine Probleme wegen der Verbindung (ein Applet darf sich zum Server, von welchem es angefordert wurde, verbinden) aber was ich mich selbst gefragt habe, ist das Zugreifen auf die Bilddateien ... also der Benutzer wählt eine Datei aus, welche von seinem Rechner stammt und diese würd übertragen. Ich glaube, da geht es ohne Signierung des Applets nicht.[/edit]
    Geändert von Billie (23.03.06 um 12:50 Uhr)
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  12. #12
    Nekoko-chan Tutorials.de Gastzugang
    Hallo

    da ich zur Zeit auch mit dem Upload von Bildern zu kämpfen habe, bin ich auf dieses Board gestoßen... Ich hab deinen Code gleich ausprobieren wollen, das Problem ist nur, dass die Variablen $_FILES["upload_file"] und $_POST["feld"] dort irgendwie nicht auftauchen. Und die Datei wird folglich auch nicht erstellt....


    Woran kann das eigentlich liegen? Bei anderen Beispielen, die ich getestet habe, ist es leider genauso.
    Langsam bin ich nämlich richtig frustriert, dass die Lösung anscheinend so nah ist, und ich sie trotzdem nicht finden kann
     

  13. #13
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Also wenn du in phpinfo() keine $_POST Variablen angezeigt bekommst und du auch keinen Fehler vom Server bekommst (einen anderen Error Code als HTTP_OK bzw. 200) solltest du deine Anfrage lokal testen.

    Ich habe hierzu den Echo Server von http://www.javabuch.de/ verwendet. Hierzu kompilierst und startest du einfach folgende Java-Anwendung:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    /* EchoServer.java */
     
    import java.net.*;
    import java.io.*;
     
    public class EchoServer
    {
      public static void main(String[] args)
      {
        int cnt = 0;
        try {
          System.out.println("Warte auf Verbindungen auf Port 7...");
          ServerSocket echod = new ServerSocket(7);
          while (true) {
            Socket socket = echod.accept();
            (new EchoClientThread(++cnt, socket)).start();
          }
        } catch (IOException e) {
          System.err.println(e.toString());
          System.exit(1);
        }
      }
    }
     
    class EchoClientThread
    extends Thread
    {
      private int    name;
      private Socket socket;
     
      public EchoClientThread(int name, Socket socket)
      {
        this.name   = name;
        this.socket = socket;
      }
     
      public void run()
      {
        String msg = "EchoServer: Verbindung " + name;
        System.out.println(msg + " hergestellt");
        try {
          InputStream in = socket.getInputStream();
          OutputStream out = socket.getOutputStream();
          out.write((msg + "\r\n").getBytes());
          int c;
          while ((c = in.read()) != -1) {
            out.write((char)c);
            if((char) c == '\n') System.out.print("\\n\r\n");
            else if((char) c == '\r') System.out.print("\\r");
            else System.out.print((char)c);
          }
          System.out.println("Verbindung " + name + " wird beendet");
          socket.close();
        } catch (IOException e) {
          System.err.println(e.toString());
        }
      }
    }

    Dann änderst du noch deine URL-Adresse zu der die Verbindung herstellst auf deinen lokalen Host und dem Port 7, also

    http://localhost:7/upload.php

    ... die PHP-Datei ist eigentlich irrelevant, da du von diesem Server keine Antwort bekommen wirst du siehst nur die Anfrage und kannst diese dann auf Korrektheit überprüfen.

    Wie gesagt, so habe ich mein Problem entdeckt.

    mfg Billie
    Geändert von Billie (15.05.06 um 09:54 Uhr)
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  14. #14
    kirie kirie ist offline Rookie
    Registriert seit
    Apr 2005
    Beiträge
    6
    Hallo Billie,

    ich habe Deinen Code ausprobiert um eine Datei auf einen Server zu laden.
    Auf jeden Fall vielen Dank, dass Du Deine Idee zur Verfügung stellst.

    In der Zeile 37: byteStream.writeTo(conn.getOutputStream());
    Tritt bei mir jedoch eine Exception auf:
    java.net.ProtocolException: Already connected!

    Hattest Du das Problem auch?

    Gruß
    kirie
     

  15. #15
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Hellas,

    Nein hatte leider nie diesen Fehler. Ich verstehe sie eigentlich auch nicht ganz, da es ja nur recht ist, dass eine Verbindung besteht. Aber evtl. probiert er sich erneut zu verbinden.

    Ich werde es mir am Nachmittag nochmal ansehen. Trotzdem könntest du evtl. deinen gesamten Code posten.
     

Ähnliche Themen

  1. FileUpload ohne FileSystem in Datenbank mit PostBack
    Von Eroli im Forum .NET Web und Kommunikation
    Antworten: 5
    Letzter Beitrag: 06.09.10, 20:01
  2. [JSP/Servlets] Status abfragen während einer Methode ohne EJB?
    Von Chimaira im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 10.05.08, 12:41
  3. Fileupload
    Von kakktus im Forum Java
    Antworten: 3
    Letzter Beitrag: 26.04.05, 19:56
  4. Schöner Fileupload ohne DLL?
    Von webwurm im Forum ASP
    Antworten: 9
    Letzter Beitrag: 04.01.04, 18:01
  5. Fileupload?
    Von smax im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 12.09.03, 14:10