Java 将字节数组流式传输到Google应用程序引擎servlet

Java 将字节数组流式传输到Google应用程序引擎servlet,java,google-app-engine,Java,Google App Engine,我正在尝试以字节[]的形式将图像流式传输到Google应用程序引擎servlet。我以前在Tomcat上运行servlets时就这样做过,但出于某种原因,在GAE上这样做似乎更成问题 字节数组可以从客户端正常传输,大小正确,但在服务器端读取时总是空的 下面是从客户端执行流式处理的重要代码片段: URL myURL = new URL("http://myapp.appspot.com/SetAvatar?memberId=1"); URLConnection servletConnection

我正在尝试以字节[]的形式将图像流式传输到Google应用程序引擎servlet。我以前在Tomcat上运行servlets时就这样做过,但出于某种原因,在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 servlet的代码:

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
我尝试了几乎所有的方法,比如不同的读卡器和流,但总是得到相同的结果:服务器端有一个空字节数组。我正在使用ApacheCommons IO包中的IOUtils类,但我也尝试过不使用它


知道为什么会这样吗?提前感谢您提供的任何线索

您是否尝试过使用netcat或流量分析器等工具来拦截代码发出的特定HTTP请求?例如,它可能发送的内容长度为0。一旦我掌握了代码,我会尝试使用它-谢谢你的建议,尼克!我现在已经测试过了,就客户端发送的内容而言,一切看起来都很好。我已在客户端中显式设置了URLConnection的内容长度,但服务器仍将其报告为0。欢迎任何其他想法!您是否将输出与浏览器生成的输出(或任何其他正常工作的请求)进行了比较?检查差异将为您提供一个开始的地方。您也可以尝试重新生成使用curl或wget观察到的请求。除了设置内容长度之外,我还计划检查流量,但我找到了问题的解决方案:客户端不应该在处理输出流之前和之后获取输入流。当我改变这一点时,一切都如愿以偿!谢谢你花时间帮忙,尼克!:-)