2010-10-19 3 views
0

Cela fonctionne très bien pour les fichiers. J'ai marqué l'emplacement nécessitant un refactoring pour le faire fonctionner avec un bitmap. Je n'arrive pas à trouver un ContentBody compatible pour .addPart. Le problème que j'essaye de résoudre est que j'ai déjà l'image dans un ImageView dans une Activité, ainsi plutôt que de la relire du SD cara, je veux la passer directement à cette méthode. Je vais probablement l'escalader pendant que je suis là.Aide Refactoring méthode de travail Pour charger BitMap (au lieu de fichier) Pour PHP Server

J'ai trouvé un indice dans ce code, mais il ne semble pas être compatible Android

Part[] parts = { 
      new FilePart("pictureFile", new 

ByteArrayPartSource ("pictureFile", getBytes (bitmap))), };

Je suis tellement Freak'n perdu :(

Toutes les idées TIA

public JSONArray uploadUserPhoto(String fileToSend, boolean isPrimary) { 

     String url = "http://www.nationwidearbitrationandmediation.com/ia/android/uploadImage.php"; 
     JSONArray jsonArray = null; 

     try { 
      HttpClient client = new DefaultHttpClient(); 
      client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 

      HttpPost post = new HttpPost(url); 
      //try adding these 
      post.getParams().setParameter("http.protocol.expect-continue", false); 
      post.getParams().setParameter("http.protocol.content-charset", "UTF-8"); 
      post.getParams().setParameter("http.protocol.reject-relative-redirect", false); 

      MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

      reqEntity.addPart("ip", new StringBody(Boolean.toString(isPrimary), "text/plain", Charset.forName("UTF-8"))); 

       /*** NEED HELP HERE ****/ 
      File fileToUpload = new File(fileToSend);   //get file from name 
      Log.d(TAG,"FileSize: " + fileToUpload.length()); //good time to test if file is larger than maxFileSize 


      FileBody fileBody = new FileBody(fileToUpload, "image/jpg"); 
      reqEntity.addPart("uploadedfile", fileBody); 
      /***** DONE *****/ 

      post.setEntity(reqEntity); 

      HttpResponse response = client.execute(post); 
      HttpEntity resEntity = response.getEntity(); 
      String serverResponse = EntityUtils.toString(resEntity); 
      client.getConnectionManager().shutdown(); 

      Log.i("RESPONSE",serverResponse); 

      return new JSONArray(serverResponse); 

    } catch (Exception e) { 
     Log.i(TAG,"Error: " + e.toString()); 
     return jsonArray; 
    } 

} // uploadUserPhoto

Répondre

0

POUR LES IMAGES PETITS RESOLU -. Je base64 pour obtenir une image Comme je ne voulais que les petites images, cela fonctionnera pour moi

Je ne marque pas cela comme une réponse car d'autres pourraient avoir besoin d'un vrai correctif et non d'un hack

0

Voici une version modifiée qui envoie un tableau d'octets au serveur, aussi loin que vous pouvez obtenir les octets d'images que vous pouvez l'utiliser pour les envoyer au serveur comme une image jointe à la demande POST:

public String uploadUserPhoto(byte[] bytesToSend, boolean isPrimary) { 
    String url = "test.php"; 

    try { 
     HttpClient client = new DefaultHttpClient(); 
     client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 

     HttpPost post = new HttpPost(url); 
     //try adding these 
     post.getParams().setParameter("http.protocol.expect-continue", false); 
     post.getParams().setParameter("http.protocol.content-charset", "UTF-8"); 
     post.getParams().setParameter("http.protocol.reject-relative-redirect", false); 

     MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

     reqEntity.addPart("ip", new StringBody(Boolean.toString(isPrimary), "text/plain", Charset.forName("UTF-8"))); 

     reqEntity.addPart(new FormBodyPart("uploadedFile", new ByteArrayBody(bytesToSend, "application/octet-stream", "uploadedFile"))); // you can also use image/jpg as mime type 

     post.setEntity(reqEntity); 

     HttpResponse response = client.execute(post); 
     HttpEntity resEntity = response.getEntity(); 
     String serverResponse = EntityUtils.toString(resEntity); 
     client.getConnectionManager().shutdown(); 


     return serverResponse; 
    } catch (Exception e) { 
     System.out.println("Error: " + e.toString()); 
     return null; 
    } 
} 
Questions connexes