In mijn benadering gebruikte ik org.apache.http.entity.mime.MultipartEntity en voegde de naam van het afbeeldingsbestand toe als een FileBody
entity.addPart("image_" + photo_count, new FileBody(
new File(failed.getFilenames()[i])));
geef dan de MultiPartEntity door aan de HttpPost. Ik heb geen volledige code gepost omdat er heel veel opmerkingen en code zijn die niets met uw vraag te maken hebben. Door de afbeelding door te geven als een FileBody is het mogelijk om de afbeelding op te halen met behulp van de stand php-bestandsverwerkingscode (zie hieronder).
if ((!empty($_FILES[$im])) && ($_FILES[$im]['error'] == 0)) {
$newname = dirname(__FILE__) . '/../photo/' . $campaign . '/' . $fn;
if (!file_exists($newname)) {
if (move_uploaded_file($_FILES[$im]['tmp_name'], $newname)) {
//$resp = "The file " . $fn . " has been uploaded";
//printf("%s", $resp);
} else {
$error = $error + 1;
}
}else{
//image file already exists
$error = $error + 1;
}
} else {
$error = $error +1;
}
Voor mijn doel was de bovenstaande code in een lus omdat ik met meerdere afbeeldingen te maken had
$im = 'image_' . $i;
verwijst naar de naam van de afbeelding in de entiteit.
Sorry voor de korte post, ik heb haast.
Vergeten te vermelden waarom ik de Base64-stringbenadering niet heb gebruikt, is dat het de grootte van de afbeelding die u kunt verzenden, beperkt. De FileBody-aanpak in de entiteit was de beste benadering die ik vond.
U kunt strings doorgeven met:
entity.addPart("address", new StringBody(failed[0].getAddress()));
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 20000); // Timeout
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("address", new StringBody("my address example"));
entity.addPart("image_0", new FileBody(new File("filename of image")));
HttpPost post = new HttpPost("server address");
post.setEntity(entity);
HttpResponse response = client.execute(post);