Wie die Beschreibung sagt, mache ich ein Foto in Android. Es wird komprimiert und zu einem byte[]
, dann base64encoded
hinzugefügt. Er sendet mit JSON an meinen Webservice, wo es "entschlüsselt" werden soll und in einer SQL-Tabellenzeile gespeichert werden soll. Ich kann die codierte Zeichenfolge in einer separaten Zeile speichern, damit ich weiß, dass sie da ist.Base64 Bild von Android mit JSON an php Webservice senden, entschlüsseln, auf SQL speichern
Kann mir jemand das ansehen und mir zeigen, wo ich es falsch mache? * Sorry für den langen Code. Ich möchte nichts verpassen, wenn Hilfe angeboten wird!
ANDROID SIDE
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
stream = new ByteArrayOutputStream();
picture.compress(Bitmap.CompressFormat.JPEG, 50, stream);
image = stream.toByteArray();
String ba1 = Base64.encodeToString(image, Base64.DEFAULT);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainScreen.this);
String post_username = sp.getString("username", "anon");
try {
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", post_username));
params.add(new BasicNameValuePair("picture", ba1));
JSONObject json = jsonParser.makeHttpRequest(POST_COMMENT_URL,
"POST", params);
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Picture Added!", json.toString());
//finish();
return json.getString(TAG_MESSAGE);
} else {
Log.d("Upload Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(MainScreen.this, file_url, Toast.LENGTH_LONG)
.show();
}
}
}
}
PHP SIDE
<?php
require("config.inc.php");
if (!empty($_POST)) {
$user = $_POST['username'];
$data = $_POST['picture'];
$data = base64_decode($data);
$im = imagecreatefromstring($data);
header('Content-Type: image/jpeg', true);
ob_start();
imagejpeg($im);
$imagevariable = ob_get_contents();
ob_end_clean();
$query = "INSERT INTO pictures (username, photo, rawdata) VALUES (:user, :photo, :raw) ";
$query_params = array(
':user' => $user,
':photo' => $imagevariable,
':raw' => $_POST['picture']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error. Couldn't add post!";
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "Picture Successfully Added!";
echo json_encode($response);
} else {
}
?>
Welche Art von Wert ist 'rawdata' gesetzt wie in MySQL? Ein Blob oder etwas anderes? – Pitchinnate
Ich verwende Rawdata, um zu bestätigen, dass es von der App in die Datenbank gelangt. rawdata ist nur eine Textzeile und speichert die base64-Daten. Ich brauche es nicht, nachdem ich das Bild dekodieren und speichern kann. Es war nur zum Testen. – JeffK
Ich wäre auch glücklich mit Multiparteity, wenn jemand mich durchgehen könnte. Ich dachte darüber nach, herauszufinden, wie man diese Base64 entschlüsseln könnte. – JeffK