Я пытаюсь загрузить изображение (закодированное base64) вместе с другими значениями на веб-сервер PHP, который берет эту информацию и выполняет некоторую дополнительную обработку.Загрузите кодированное изображение base64 с использованием HttPost и HttpClient
Следующие функции являются частью AsyncTask, которая выполняет запрос.
Я строю postData вручную, конкатенируя разные значения.
Класс JsonUrlLook помогает мне найти правильный URL для отправки данных. Я проверил это. Верно.
Когда я пытаюсь выполнить созданную HttpPost, мой ответ равен NULL. У кого-нибудь есть идея, почему это так?
private String getPostData(String arrayString, String base64Image, String boundary) {
String remoteMethod = "uploadPic";
String postData = "";
// Add remote method name
postData += "--" + boundary + "\r\n";
postData += "Content-Disposition: form-data; name=\"" + boundary + "[method]\"\r\n\r\n";
postData += remoteMethod;
postData += "--" + boundary + "\r\n";
postData += "Content-Disposition: form-data; name=\"" + boundary + "[params]\"\r\n\r\n";
postData += arrayString;
postData += "--" + boundary + "\r\n";
postData += "Content-Disposition: form-data; name=\"" + boundary + "\"\r\n\r\n";
postData += "filename=\"image.jpg\"\r\n\r\n";
postData += base64Image;
postData += "--" + boundary + "--";
return postData;
}
private String uploadPicture(String arrayString, String base64Image) {
String boundary = "tx_fpoemobile_pi2";
// Get post data
String postData = getPostData(arrayString, base64Image, boundary);
// Get webservice uri
JsonUrlLookup lookup = new JsonUrlLookup(context);
URL webserviceUrl = lookup.buildUrl(context.getResources().getString(R.string.page_uid_webservice));
URI webserviceUri = null;
try {
webserviceUri = new URI(webserviceUrl.toString());
} catch(Exception e) {
// TODO
}
// Build client and post
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(webserviceUri);
// Set header of post
httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
httpPost.setHeader("Content-Length", String.valueOf(postData.length()));
// Set body
try {
httpPost.setEntity(new StringEntity(postData));
} catch (Exception e) {
// TODO
}
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
} catch (ClientProtocolException e) {
// TODO
} catch (IOException e) {
// TODO
}
return "uploadPictureSuccess";
}
Я сказал, что мне нужно передать изображение в кодировке Base64, а не в двоичной форме. Но в любом случае, я попробую ваше решение. – Klaus
Не могли бы вы объяснить функцию «writeParamData»? – Klaus
В вашем сообщении «для получения ответа» вы используете httpClient и httpPost с установленным объектом. Это большая часть первой части. Соединяют ли они, или это совершенно разные подходы. Я не понимаю. – Klaus