Потоковый байтовый массив в сервлет Google App Engine - PullRequest
0 голосов
/ 31 октября 2011

Я пытаюсь передать изображение в виде байта [] в сервлет Google App Engine. Я делал это раньше с сервлетами, работающими на Tomcat, но по какой-то причине это с GAE кажется более проблематичным.

Массив байтов отлично передается со стороны клиента и имеет правильный размер, но при чтении на стороне сервера он всегда пуст.

Вот важный фрагмент кода, выполняющий потоковую передачу с клиента:

URL myURL = new URL("http://myapp.appspot.com/SetAvatar?memberId=1");

URLConnection servletConnection = myURL.openConnection();

servletConnection.setRequestProperty("Content-Type", "application/octet-stream");
servletConnection.setDoOutput(true);
servletConnection.setDoInput(true);

OutputStream os = servletConnection.getOutputStream();
InputStream is = servletConnection.getInputStream();

IOUtils.write(imageBytes, os);

os.flush();
os.close();

BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;

while ((inputLine = in.readLine()) != null) {
  System.out.println(inputLine);
}

in.close();

Вот код из сервлета GAE:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  BufferedReader reader = request.getReader();
  byte[] imageBytes = IOUtils.toByteArray(reader);

  PrintWriter outputWriter = response.getWriter();

  int len = request.getContentLength();
  outputWriter.println("Content type is: " + request.getContentType());
  outputWriter.println("Content length is: " + request.getContentLength());
  outputWriter.println("Bytes read: " + imageBytes.length);

  outputWriter.close();
}

Вывод с сервера:

Content type is: application/octet-stream
Content length is: 0
Bytes read: 0

Я пробовал почти все, например, разные читатели и потоки, но всегда с одним и тем же результатом: пустой байтовый массив на стороне сервера. Я использую класс IOUtils из пакета ввода-вывода Apache Commons, но я тоже пробовал без него.

Есть идеи, почему это происходит? Заранее спасибо за любые подсказки!

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