App Engine и обычные файлы FileUpload - PullRequest
3 голосов
/ 23 марта 2010

Я отправляю сообщение, созданное с помощью буфера протокола Google, на устройстве Android с помощью этого кода:

// Set up the HttpClient
HttpClient client = new DefaultHttpClient();
String url = "http://192.168.2.103:8888/sdroidmarshal";
HttpPost postRequest = new HttpPost(url);

// Create the content for the message
AbstractContentBody[] parts = new AbstractContentBody[1];
InputStream ins = new ByteArrayInputStream(offers.build().toByteArray());
parts[0] = new InputStreamBody(ins, "sdroidmsg");

// Add the content to the message
MultipartEntity requestContent = new MultipartEntity();
requestContent.addPart("message", parts[0]);

// Send!
postRequest.setEntity(requestContent);
client.execute(postRequest);

try {
  ResponseHandler<String> responseHandler = new BasicResponseHandler();
  String responseBody = client.execute(postRequest, responseHandler);

} catch (Throwable t) {

}

В конечном итоге этот код будет отправлять более одной части ...

У меня есть сервлет, работающий на движке приложений Google, который получает этот почтовый запрос, и на данный момент имеет только следующий код:

  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

    super.doPost(req, resp);

    try {
      ServletFileUpload upload = new ServletFileUpload();
      resp.setContentType("text/plain");

      FileItemIterator iterator = upload.getItemIterator(req);
      while (iterator.hasNext()) {
        FileItemStream item = iterator.next();
        InputStream stream = item.openStream();

        if (item.isFormField()) {
          log.warning("Got a form field: " + item.getFieldName());
        } else {
          log.warning("Got an uploaded file: " + item.getFieldName() +
                      ", name = " + item.getName());

        }
      }
    } catch (Exception ex) {
      throw new ServletException(ex);
    }
  }

Очевидно, что сервер не очень много делает прямо сейчас! Но я заметил, что он, кажется, получает две части, называемые «message» и файлом «sdroidmsg», которые я действительно не понимаю. Конечно, он должен получить это только один раз? Возможно, я подумал, что sdroidmsg может быть разделен на две части из-за размера, но это полное предположение, я действительно не знаю внутреннюю работу того, что происходит за сценой. В любом случае может объяснить, почему это происходит? Я могу опубликовать больше кода, если требуется.

1 Ответ

0 голосов
/ 04 сентября 2011

Вы вызываете client.execute () дважды.

Вы уверены, что не выполняете POST и не получаете два отдельных запроса, вместо того, чтобы поля отправлялись дважды в одном POST?

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