PinkFloydRocks PinkFloydRocks - 1 month ago 7
PHP Question

Android post Base64 String to PHP

------ Solution ------
The issue was on our server. It can only handle post requests if we put www in front of our domain name. So that's what caused the problems. I'm setting the first answer as THE answer since it worked once I sorted the URL out.

A BIG thanks to everybody that chimed in - I love you & Stack Overflow :-)

So this Android development is making me scratch my head a lot.

My problem is that the POST variable in my PHP script is always blank.
I've tried to change the variable's name, the content of the variable etc..

The problem has to recide in the java code, because when I var_dump() the request in php, it is null.

This is my scenario:

I let the user snap a photo, the photo is saved to the SD-card and I get the image's path, and eventually convert it to a Base64 string. I then want to post this base64 string to a php script that converts it back from Base64 and writes it as an image on my server's hard drive like 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);


On the server end, this is what my PHP script looks like:

<?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";
?>


This is an example of a Base64 string I'm trying to post:
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

Answer

This is the code for image:

ByteArrayOutputStream bao = new ByteArrayOutputStream();                

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeBytes(ba);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("image",ba1));

This is the HTTP code for sending the image to the server:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://servername.com/uploadimage.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));        
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();

If you find any more difficulties ask me or a check:

In PHP header file changes :

header('Content-Type: image/jpg; charset=utf-8');
$base=$_REQUEST['image'];