I mitt tillvägagångssätt använde jag org.apache.http.entity.mime.MultipartEntity och lade till bildfilens namn som en FileBody
entity.addPart("image_" + photo_count, new FileBody(
new File(failed.getFilenames()[i])));
skicka sedan MultiPartEntity till HttpPost. Jag har inte lagt upp hela koden eftersom den har fått massor av kommentarer och kod som inte är relaterad till din fråga. Genom att skicka bilden som en FileBody är det möjligt att få bilden med hjälp av stand php filhanteringskod (se nedan).
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;
}
För mitt syfte var koden ovan i en loop eftersom jag hade att göra med flera bilder
$im = 'image_' . $i;
hänvisar till namnet på bilden i entiteten.
Förlåt för det korta inlägget, jag har bråttom.
Glömde nämna anledningen till att jag inte använde Base64-strängmetoden är att den begränsar storleken på bilden som du kan skicka. FileBody-metoden i entiteten var den bästa metoden jag hittade.
Du kan skicka strängar med:
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);