Android post Base64-String in PHP
- - - - - - - Lösung ------
Das Problem wurde auf unserem server. Es kann nur mit post-Anforderungen, wenn man www vor der domain-name. Also das ist, was die Probleme verursacht. Ich werde die erste Antwort als DIE Antwort da, es funktionierte einmal sortierte ich die URL heraus.
Ursprüngliche Frage
Habe ich eine POST variable in mein PHP-Skript ist immer leer.
Ich habe versucht, ändern Sie den Namen der Variablen, der Inhalt der variable usw..
Das problem hat sich in den java-code, denn wenn ich var_dump()
die Anfrage in php, es ist null.
Dies ist mein Szenario:
Lass ich den user snap ein Foto, das Foto gespeichert ist, auf die SD-Karte und ich bekomme das Bild Weg, und schließlich konvertieren Sie es in einen Base64-string. Dann möchte ich in diesem post base64-string an ein php-Skript, wandelt es sich wieder von Base64 und schreibt es als Bild auf meinem server die Festplatte etwa so:
File f = new File(savedImagePath);
Bitmap bitmap = BitmapFactory.decodeFile(f.getPath());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, stream);
byte [] byte_arr = stream.toByteArray();
String image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://myURL/uploadImage.php");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("image", image_str));
post.setEntity(new UrlEncodedFormEntity(pairs));
HttpResponse response = client.execute(post);
Auf dem server, das ist, was mein PHP-Skript sieht wie folgt aus:
<?php
$base = $_POST["image"];
$binary=base64_decode($base);
header('Content-Type: bitmap; charset=utf-8');
$file = fopen('uploaded_image.jpg', 'w');
fwrite($file, $binary);
fclose($file);
echo "script done executing";
?>
Dies ist ein Beispiel für einen Base64-string, den ich versuche zu posten:
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
- verwenden Sie android-emulator? Sehen, ob es keine Netzwerk-analyzer, um sicherzustellen, dass "Bild" tatsächlich gesendet werden aus
- Nein, ich bin den Test auf einem HTC Wildfire im moment. Ich bin mit eclipse gibt es eine eingebaute Netzwerk-analyzer oder muss ich etwas suchen im web?
- Problem auftreten, eine Menge in diesem Fall .. wenn du noch weitere Abfragen hier Fragen
- ich habe deine Fehler hören nur add header('Content-Type: image/jpg; charset=utf-8'); sicher, Sie werden
- Ich habe versucht, die Bearbeitung der header, so wie Sie vorgeschlagen, aber noch kein Glück.. Denke ich werde einfach meine Augen schließen und hoffen, dass die Magische debug-fee bezahlt mir einen Besuch ab und regelt alles... Ah, das ist besser!! 😉
- u kann mir sagen, was ist die Antwort vom server
- die Antwort vom server ist genau das, was ist, als echo: "das Skript fertig ausgeführt"
- schauen Sie anstelle von echo string .. echo-Bild ok ........... echo "<img src='upload_image.jpg'>"; überprüfen Sie es sagen, welche Antwort u hab .. ich kann u helfen weiter
- Jetzt ist es nur echo <img src='upload_image.jpg'>
- dude nutzen Sie diese echo "<img src= " uploadimage.jpg>";
- dasselbe Ergebnis wie im letzten echo habe ich Angst
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der code für das Bild:
Dies ist der HTTP-code für das senden des Bildes an den server:
Wenn Sie mehr Schwierigkeiten, Fragen Sie mich oder schauen Sie:
In der PHP-header-Datei änderungen :
Haben Sie versucht, das Lesen der raw post-Daten in PHP? So etwas wie
$data = $xml = file_get_contents('php://input');
Haben Sie einen Blick auf diesen link für mehr info
http://www.codediesel.com/php/reading-raw-post-data-in-php/
var_dump($_REQUEST);
um zu sehen, was Sie arbeiten, mit in PHP. Eine weitere Plausibilitätsprüfung option wäre zu prüfen$_SERVER['REQUEST_METHOD']
aber es probly ist die POST... können Sie tatsächlich senden Sie die Daten entlang w/ POST-request auch nicht sicher, wie Sie die GET-Parameter werden aus dem code-Beispiel, aber im Allgemeinen würde ich empfehlen, die Bestimmung, ob bestimmte Variablen aus GET-oder POST-und Codierung vor, dass.$_REQUEST
ist mehr oder weniger für die Fehlersuche.laden Sie einfach die Base64.java http://iharder.sourceforge.net/current/java/base64/ & legen Sie die Datei in Ihrem Projekt - & dann
diese mit
ersetzen Sie diese
post.setEntity(new UrlEncodedFormEntity(pairs));
mit
Überprüfen Sie auch beim Import von Base64-es wird die import-Datei aus Ihrem Paket & dann die post-server wird es post.
in Ihrem php-code nur ändern,
dies ändern
$base = $_POST["Bild"];
zu
$base = $_REQUEST['Bild'];
Schicken Sie Ihre Daten wie folgt:
http://myURL/uploadImage.php
Sie absichtlich gemacht? bestätigen, wenn Sie ihn nicht benutzen irrtümlich 🙂Ist der HTTP-Antwort-Code, die Sie bekommen 200?
Wenn ja, versuchen Sie diese header-Felder:
"Akzeptieren": "text/html"
"Accept-Language": "de"
"Content-Length": yourString.Länge
"Content-Type": "application/x-www-form-urlencoded"