2010-09-27 5 views
2

bonjour je suis nouveau dans Android devlopment je veux savoir comment télécharger une image dans Android i DonT trouvé tout tutoriel utile pour ce peut me donner quelques instructions, pls, aidez-moi.l'image android télécharger

+0

Pouvez-vous être plus précis sur ce que vous voulez faire avec cette image? Il existe de nombreuses façons de travailler avec des images, et j'ai besoin de choisir celui qui convient le mieux à vos besoins. Avec le meilleur, – Patrick

+0

Tout ce que vous voulez est [ici] (http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/) . – Vikas

Répondre

5

J'ai construit ces méthodes lil pour vous:

private boolean handlePicture(String filePath, String mimeType) {  
    HttpURLConnection connection = null; 
    DataOutputStream outStream = null; 
    DataInputStream inStream = null; 

    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    int bytesRead, bytesAvailable, bufferSize; 

    byte[] buffer; 

    int maxBufferSize = 1*1024*1024; 

    String urlString = "http://www.yourwebserver.com/youruploadscript.php"; 

    try { 
     FileInputStream fileInputStream = null; 
     try { 
      fileInputStream = new FileInputStream(new File(filePath)); 
     } catch(FileNotFoundException e) { } 
     URL url = new URL(urlString); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setUseCaches(false); 

     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Connection", "Keep-Alive"); 
     connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);    

     outStream = new DataOutputStream(connection.getOutputStream()); 

     outStream.writeBytes(addParam("someparam", "content of some param", twoHyphens, boundary, lineEnd));     

     outStream.writeBytes(twoHyphens + boundary + lineEnd); 
     outStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + filePath +"\"" + lineEnd + "Content-Type: " + mimeType + lineEnd + "Content-Transfer-Encoding: binary" + lineEnd);   
     outStream.writeBytes(lineEnd); 

     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 

     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

      while (bytesRead > 0) { 
       outStream.write(buffer, 0, bufferSize); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     } 

      outStream.writeBytes(lineEnd); 
      outStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

     fileInputStream.close(); 
     outStream.flush(); 
     outStream.close(); 
    } catch (MalformedURLException e) { 
     Log.e("DEBUG", "[MalformedURLException while sending a picture]"); 
    } catch (IOException e) { 
     Log.e("DEBUG", "[IOException while sending a picture]"); 
    } 

    try { 
      inStream = new DataInputStream(connection.getInputStream()); 
      String str; 

      while ((str = inStream.readLine()) != null) { 
       if(str=="1") { 
        return true; 
       } else { 
        return false; 
       } 
      } 
      inStream.close(); 
     } catch (IOException e){ 
      Log.e("DEBUG", "[IOException while sending a picture and receiving the response]"); 
     } 
    return false; 
} 

private String addParam(String key, String value, String twoHyphens, String boundary, String lineEnd) { 
     return twoHyphens + boundary + lineEnd + "Content-Disposition: form-data; name=\"" + key + "\"" + lineEnd + lineEnd + value + lineEnd; 
} 

devrait fonctionner jusqu'à présent. Sur votre serveur web, vous avez besoin d'un script PHP qui renvoie un "1" pour un téléchargement réussi et un autre pour une erreur. Je suggère également de le faire dans un ASyncTask, pour éviter de bloquer l'utilisateur pendant le téléchargement. Sur le serveur Web, vous avez un fichier nommé "uploadedfile". J'espère que cela pourra aider!

+0

Merci beaucoup – bindal

+0

Pas de problème :) Faites le moi savoir, si cela fonctionne pour vous –

+0

Voulez-vous mettre à jour votre réponse après avoir lu cette réponse? http://stackoverflow.com/a/2926550/8418 (J'essayais de télécharger sur App Engine et après ça, ça a marché!) – Lipis

0

Je n'ai pas de tutoriel sur ce sujet. Ici vous avez un exemple: np.

POST/HTTP/1.1
Hôte: JMaster
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv: 1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept: text/html, application/xhtml + xml, application/xml; q = 0.9, /; q = 0,8
Accept-Language: pl, en-us; q = 0.7, en; q = 0.3
Accept-Encoding: gzip, deflate Accept-
charset: ISO-8859-2, utf-8; q = 0,7, *; q = 0,7
Referer: http://shop/index.php/index/register/b/
Content-Type: multipart/form-data; boundary = --------------------------- 19187836022413
Transmis par X pour: 127.0.0.1
X-Forwarded-Host: jmaster
X-Forwarded-serveur: JMaster
Connection: Keep-Alive
Content-Length: 38682
------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- name = "fichier2"; filename = "Clipboard02.png" Type de contenu: image/png
‰ PNG
?
... et voilà comment ça se passe.
----------------------------- 19187836022413
et vous terminez la transmission.
---------------------------- 19187836022413

espérons que cela aide.

Questions connexes