У меня есть два байта [] массива из службы Android Camera Service.Я хочу отправить их и несколько параметров на мой сервер AppEngine, на котором работает среда веб-приложений python.
ПРОБЛЕМА : я продолжаю получать пустые аргументы HTTP-запроса на стороне сервера.
Мой основной подход - Apache HttpClient:
1) Android 2.x не включает в себя класс MultiPartEntity, необходимый для составных бинарных файлов.Поэтому я добавил httpmime-4.0.1.jar и apache-mime4j-0.6.1.jar к пути сборки.
2) Сторона Android, я делаю POST так:
public String post(String URI, byte[] jpeg, String description) {
// Setup MultiPartEntity
MultipartEntity args = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
args.addPart("mydescription", new StringBody(description));
// Now add the file
InputStream s1 = new ByteArrayInputStream(jpeg);
args.addPart("myfile", new InputStreamBody(s1, "image/jpeg", "1.jpeg"));
HttpClient httpclient = new DefaultHttpClient();
// HTTP 1.1 is much faster with HttpClient, same issues w/o it
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httpost = new HttpPost(URI);
httpost.setEntity(args);
HttpResponse response = httpclient.execute(httpost);
// blah blah blah, process response
}
3) Со стороны Python AppEngine мой обработчик выглядит следующим образом:
class UploadHandler(webapp.RequestHandler):
def post(self, request):
logging.info(self.request.arguments())
logging.info(self.request.POST)
4) Аргументы пусты -> пустые массивы выводятся в журнал.Нижний уровень self.request._request__body()
от webob также пуст.плохой знак!
5) Если я не добавлю InputStreamBody в MultipartEntity (только аргументы StringBody), все будет отлично, и появится аргумент mydescription.
6) Я установил сервер PHP и попытался опубликовать: POST работает с PHP!
7) Что-то в формате, который отправляет HttpClient, вызывает webapp / webob / wsgi / cgi.FieldStorage или что-то ещепроблемы.Я не могу понять, где это происходит.
8) Я также попытался написать необработанную http multipart / форму в соответствии с RFC 2388, используя URLConnection, с похожими результатами.Что такое RFC - это webapp / webob / wsgi / что бы то ни было?
Спасибо всем!
Это мой первый серьезный вопрос о переполнении стека, надеюсь, я все правильно отформатировал; -)