2017-07-22 2 views
-1

Ich lade ein Bild von Android in PHP hoch, indem ich es in das Byte-Array umwandle. Danach reiche ich es einfach mit der POST-Methode ein.Effiziente Möglichkeit, ein Bild von Android auf PHP hochzuladen

Auf der Serverseite mache ich das Gegenteil von dem, was ich auf der Seite des Clients (Android App) mache.

Ich fragte mich, ob es eine andere gute/effiziente/intelligente Möglichkeit gibt, dies zu tun.

Hinweis: Ich brauche nur PHP/JS/HTML und natürlich Java auf Client-Seite.

Antwort

0

Einer der effizientesten Wege, tut es Volley verwenden, so stellen Sie sicher, dass es in Ihrem gradle enthalten:

compile 'com.android.volley:volley:1.0.0' 

ich persönlich Universal Image Loader verwenden, die automatisch enthalten ist, wenn Sie Volley umfassen. Da Sie keinen Code eingegeben haben, den Sie ausprobiert haben, gebe ich Ihnen einige Beispiele. Erstellen Sie in Ihrer Aktivität, in der Sie das Bild hochladen möchten, eine Schaltfläche. Fügen Sie diesen Code hinzu, wenn auf diese Schaltfläche geklickt wird:

Dadurch wird die Galerie in Ihrem Telefon geöffnet, um nach einem Bild zu suchen. Deklarieren Sie eine Variable an der Spitze Ihrer Aktivität:

private Bitmap mBitmap; 

Nachdem Sie das Bild wählen Sie aus der Galerie hochladen möchten, schreiben Sie diesen Code:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == Constants.VALUE_BROWSE_IMAGE_REQUEST && 
      resultCode == RESULT_OK && 
      data != null) { 

     try { 
      // Get the photo URI data 
      Uri filePath = data.getData(); 

      // Get the Bitmap from Gallery 
      mBitmap = decodeBitmap(filePath, this); 
     } catch (IOException e) { 
      Toast.makeText(this, "Could not open picture.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

Nun, da Sie die Bitmap des ausgewählten haben Bild, müssen Sie diese Bitmap in base64 Zeichenfolge konvertieren, so dass Volley der Lage sein, kann es zu laden:

// Before uploading the selected image to the server, we need to convert the Bitmap to String. 
// This method will convert Bitmap to base64 String. 
private String getStringImage(Bitmap bmp) { 
    ByteArrayOutputStream b = new ByteArrayOutputStream(); 

    // This part handles the image compression. Keep the image quality 
    // at 70-90 so you don't cause lag when loading it on android 
    // (0-low quality but fast load, 100-best (original) quality but slow load) 
    bmp.compress(Bitmap.CompressFormat.JPEG, 80, b); 
    byte[] imageBytes = b.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

Schließlich können Sie das hochladen des Bildes beginnen:

private void uploadImage() { 
    StringRequest stringRequest = new StringRequest(
      Request.Method.POST, 
      "URL_TO_YOUR_WEB_API", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(getApplicationContext(), "Failed to upload image.", Toast.LENGTH_SHORT).show(); 
       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 

      // Converting Bitmap to String 
      String image = getStringImage(mBitmap); 

      // Create parameters 
      Map<String, String> params = new Hashtable<>(); 

      // Add parameters 
      params.put("action", "YOUR_BACKEND_KEY1"); 
      params.put("...", image); 

      // Returning parameters 
      return params; 
     } 
    }; 

    // Creating a Request Queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 

    // Adding request to the queue 
    requestQueue.add(stringRequest); 
} 

Stellen Sie sicher, die Parameterzeichenfolgen zu ersetzen, jedoch haben Sie Ihr Backend in PHP erstellt.

Beispiel URL:

http://yoursite.com/api.php?action=uploadimage&imagebase=adwtgiuewohnjsoiu&caption=somecaptiontext 

Dann würden die Parameter in Android sein:

params.put("action", "uploadimage"); 
params.put("imagebase", image); 
params.put("caption", "somecaptiontext"); 
+0

bitte diesen Beitrag als Antwort akzeptieren, wenn es Ihnen geholfen ... – busuu

Verwandte Themen