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
Nitpick: Base64 ist keine Verschlüsselung. es ist ein ENCODING. –
Okay, aber die Datei ist Größe und ursprüngliche Ausgabe wurde geändert –
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. –