我正在使用以下代码从 Android 设备发送一条使用 google 协议缓冲区构建的消息:
// 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 的应用程序引擎上运行的 servlet,它接收此发布请求,目前只有以下代码:
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);
}
}
显然服务器现在并没有做太多事情!但我注意到它似乎收到了两个部分,分别称为“消息”和文件“sdroidmsg”,我真的不明白。它肯定只应该收到一次吗?我认为 sdroidmsg 可能会因为大小而被分成两部分,但这完全是猜测,我真的不知道幕后发生的事情的内部工作原理。无论如何可以解释为什么会发生这种情况吗?如果需要,我可以发布更多代码。
您调用 client.execute() 两次。
您确定您没有发布并接收两个单独的请求,而不是在单个 POST 中将字段发送两次吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)