W moim podejściu użyłem org.apache.http.entity.mime.MultipartEntity i dodałem przekazaną nazwę pliku obrazu jako FileBody
entity.addPart("image_" + photo_count, new FileBody(
new File(failed.getFilenames()[i])));
następnie przekaż MultiPartEntity do HttpPost. Nie opublikowałem pełnego kodu, ponieważ zawiera mnóstwo komentarzy i kodu niezwiązanego z twoim pytaniem. Przekazując obraz jako FileBody, można go uzyskać za pomocą standardowego kodu obsługi plików php (patrz poniżej).
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;
}
W moim celu powyższy kod był zapętlony, ponieważ miałem do czynienia z wieloma obrazami
$im = 'image_' . $i;
odnosi się do nazwy obrazu w encji.
Przepraszam za krótki post, spieszę się na czas.
Zapomniałem podać powód, dla którego nie użyłem podejścia opartego na łańcuchu Base64, ponieważ ogranicza on rozmiar obrazu, który możesz wysłać. Podejście FileBody w encji było najlepszym podejściem, jakie znalazłem.
Możesz przekazywać ciągi znaków za pomocą:
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);