2016-09-14 1 views
1

Ich habe einen Uploader in Android, der eine Image-Datei hochlädt (die durch einen Algorithmus zu 400bytes verschlüsselt ist), aber die Datei muss in base64 String decodiert werden gespeichert werden zu einer MySQL-Datenbank als String und lade das Bild in einen Ordner hoch.Laden Sie ein Bild auf Server in Android ohne Codierung zu Base64 mit Volley

Das Problem ist, dass die Datei zu base64 String nach dem Dekodieren es seinen Byte verschlüsselten Algorithmus Format verliert (Die Bildgröße von 400 Byte reduziert sich auf weniger)

Dies ist, was ich getan habe.

Bitmap b = this.toGrayscale(mRegisterImage); //this image file is 400byte encrypted 
uploadImage(b); 

Dies ist die Funktion uploadimage

public String getStringImage(Bitmap bmp) { //This is what converts the image to 64encoded format string 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); //Thos is what compresses image hence loosing bytes 
    byte[] imageBytes = baos.toByteArray(); 

    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

private void uploadImage(final Bitmap bmp) { 
    // Showing the progress dialog 
    try { 
     final ProgressDialog loading = ProgressDialog.show(this, 
       "Uploading fingerprint...", "Please wait...", false, false); 
     StringRequest stringRequest = new StringRequest(
       Request.Method.POST, Config.url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String s) { 
         // Disimissing the progress dialog 
          debugMessage("Return Message: " + s); 
          loading.dismiss(); 
               } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 
         try { // Dismissing the progress dialog 
          loading.dismiss(); 
          // Showing toast 
          debugMessage(volleyError.getMessage()); 
         } catch (Exception r) { 
          debugMessage("onerrorresponse: "+volleyError.getMessage()); 
         } 
        } 
       }) { 
      @Override 
      protected Map<String, String> getParams() 
        throws AuthFailureError { 
       // Converting Bitmap to String 
       String image = getStringImage(bmp); 

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

       // Adding parameters 
       params.put("image", image); 

       return params; 
      } 
     }; 
     // Creating a Request Queue 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     // Adding request to the queue 
     requestQueue.add(stringRequest); 
    } catch (Exception r) { 
     debugMessage("out: "+r.getMessage()); 
    } 
} 

Dies ist der PHP-Code:

Alles funktioniert gut, aber es gibt eine Möglichkeit, dass ich das eigentliche Bild hochladen kann, ohne es in eine Zeichenfolge in Android mit Volley-Bibliothek zu konvertieren. Der obige Code komprimiert das Bild in die Zeichenfolge, wie ändere ich diese Komprimierung, so dass die Bytes nicht verloren

+0

Nitpick: Base64 ist keine Verschlüsselung. es ist ein ENCODING. –

+0

Okay, aber die Datei ist Größe und ursprüngliche Ausgabe wurde geändert –

+0

plus Ihr Datenbank-Code ist im Grunde völlig kaputt. Du bekommst ** NICHT ** eine ID, indem du alle vorhandenen IDs ziehst und alle bis auf die letzte wegwirfst. Außerdem wird die $ ID, mit der Sie enden, NICHT die ID des neuen Datensatzes sein, den Sie beim Einfügen dieser URL erstellt haben, und Sie werden die ID/URL-Verknüpfung dadurch beenden, dass alle Einträge einzeln angezeigt werden. –

Antwort

0

Grundsätzlich nicht, weil Http Nachricht Körper byte data nur tragen kann, so kann keine andere Form dieser großen Daten durch senden http Protokoll.

Http Übertragung von Daten mit TCP, die in diesem Fall gemeinsam switching techniques verwenden. Protokolle entweder Formatdaten in bit oder byte Ebene, wo byte Ebene meist verwendet wird, so dass, wenn Sie für einen anderen Weg suchen, dann sind Sie kein Glück heute

Also selbst wenn Sie Ihre StringRequest und Weiterleiten von Daten als String parameter schließlich jeden parameter verwenden wird in byte array Typ konvertiert, so dass Sie nicht von der Konvertierung von Daten in Bytes entkommen können.

+0

Das obige überträgt es informieren über eine Zeichenfolge, Die ursprüngliche Datei ist in Form eines Bytes, Wie transportiere ich dieses Byte, ohne es zu konvertieren zu einem String-Format –

+0

letme fügen Sie etwas mehr Informationen zu meiner Antwort –

+0

Bitte korrigieren Sie mich, wenn ich falsch liege, wer jemals abstimmen dies sonst teilen Sie Ihr Wissen mit uns, indem Sie eine Antwort geben, wenn Sie können –

Verwandte Themen