2009-10-21 9 views
2

Je cherche une applet Java pour lire un fichier de la machine cliente et créer une requête POST pour le téléchargement du serveur PHP.Applet Java pour télécharger un fichier

Le script PHP sur le serveur doit recevoir le fichier en tant que téléchargement normal de fichier dans FORM submit. J'utilise le code suivant. Le contenu du fichier est transmis au script PHP mais ils ne sont pas convertis correctement en image.

//uploadURL will be a url of PHP script like 
// http://www.example.com/uploadfile.php 

URL url = new URL(uploadURL); 
HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
con.setRequestMethod("POST"); 
con.setDoInput(true); 
con.setDoOutput(true); 

InputStream is = new FileInputStream("C://img.jpg"); 
OutputStream os = con.getOutputStream(); 
byte[] b1 = new byte[10000000]; 
int n; 
while((n = is.read(b1)) != -1) { 
os.write("hello" , 0, 5); 
test += b1; 

} 
con.connect(); 
+3

Où écrivez-vous réellement l'entrée à la sortie? Pour autant que je puisse voir, la seule chose que vous écrivez à la connexion est la chaîne "Bonjour". –

Répondre

11

Voici un code qui pourrait vous aider à savoir que c'est un de mes vieux projets avec un tas de choses sans rapport, prenez-le pour ce que ça vaut. Fondamentalement, je pense que le code dans votre question manque certaines parties que le protocole HTTP nécessite

public class UploaderExample 
{ 
    private static final String Boundary = "--7d021a37605f0"; 

    public void upload(URL url, List<File> files) throws Exception 
    { 
     HttpURLConnection theUrlConnection = (HttpURLConnection) url.openConnection(); 
     theUrlConnection.setDoOutput(true); 
     theUrlConnection.setDoInput(true); 
     theUrlConnection.setUseCaches(false); 
     theUrlConnection.setChunkedStreamingMode(1024); 

     theUrlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" 
       + Boundary); 

     DataOutputStream httpOut = new DataOutputStream(theUrlConnection.getOutputStream()); 

     for (int i = 0; i < files.size(); i++) 
     { 
      File f = files.get(i); 
      String str = "--" + Boundary + "\r\n" 
         + "Content-Disposition: form-data;name=\"file" + i + "\"; filename=\"" + f.getName() + "\"\r\n" 
         + "Content-Type: image/png\r\n" 
         + "\r\n"; 

      httpOut.write(str.getBytes()); 

      FileInputStream uploadFileReader = new FileInputStream(f); 
      int numBytesToRead = 1024; 
      int availableBytesToRead; 
      while ((availableBytesToRead = uploadFileReader.available()) > 0) 
      { 
       byte[] bufferBytesRead; 
       bufferBytesRead = availableBytesToRead >= numBytesToRead ? new byte[numBytesToRead] 
         : new byte[availableBytesToRead]; 
       uploadFileReader.read(bufferBytesRead); 
       httpOut.write(bufferBytesRead); 
       httpOut.flush(); 
      } 
      httpOut.write(("--" + Boundary + "--\r\n").getBytes()); 

     } 

     httpOut.write(("--" + Boundary + "--\r\n").getBytes()); 

     httpOut.flush(); 
     httpOut.close(); 

     // read & parse the response 
     InputStream is = theUrlConnection.getInputStream(); 
     StringBuilder response = new StringBuilder(); 
     byte[] respBuffer = new byte[4096]; 
     while (is.read(respBuffer) >= 0) 
     { 
      response.append(new String(respBuffer).trim()); 
     } 
     is.close(); 
     System.out.println(response.toString()); 
    } 

    public static void main(String[] args) throws Exception 
    { 
     List<File> list = new ArrayList<File>(); 
     list.add(new File("C:\\square.png")); 
     list.add(new File("C:\\narrow.png")); 
     UploaderExample uploader = new UploaderExample(); 
     uploader.upload(new URL("http://systemout.com/upload.php"), list); 
    } 

} 
+0

@lauri: merci l'homme – user189352

+0

remercie Lauri son exemple très utile –

1

Je vous suggère de jeter un coup d'œil à Gallery Remote. Ceci est un projet open source pour télécharger des photos dans un backend PHP. C'est un peu plus complet que ce dont vous pourriez avoir besoin, mais vous devriez être capable de modifier le code à vos besoins assez facilement. Vous pouvez également consulter JUpload. Ce n'est pas aussi complet, mais c'est open source et capable de la tâche.

+0

Je veux un applet – user189352

+0

Le projet comprend une applet. La source unique est à la fois une application standard, une applet hors navigateur et une applet de navigateur. Voir http://codex.gallery2.org/Gallery2:Modules:uploadapplet – brianegge