Загрузка с камеры Android в Python AppEngine (веб-приложение) - PullRequest
1 голос
/ 27 марта 2011

У меня есть два байта [] массива из службы 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 / что бы то ни было?

Спасибо всем!

Это мой первый серьезный вопрос о переполнении стека, надеюсь, я все правильно отформатировал; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...