求解:android上传图片至服务端,statusCode总是返回500

jingyangsddx 2013-03-20 09:20:03
按照网上许多人的做法,服务端用了第三方的commons-fileupload,android端用了第三方的httpmime。
服务端代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

regist(request, response);
//super.doPost(req, resp);
}

private void regist(HttpServletRequest request, HttpServletResponse response) {
String result = "";
if (ServletFileUpload.isMultipartContent(request)) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> list = upload.parseRequest(request);
for (FileItem item:list) {
if (item.isFormField()) {
result += " enter item.isFormField-->";
String name = item.getFieldName();
String value = item.getString();
if (name.equals(PARAM_CMD)) {
if (value.equals(CMD_REGIST)) {
result += " cmd received-->";
}
}
}
else {
result += " enter else-->";
String param = item.getFieldName();
if (param.equals(PARAM_IMG_HEAD)) {
result += " enter img_head-->";
String fileName = item.getName();
byte[] imgData = item.get();
try {
FileOutputStream fout = new FileOutputStream(dir_img_head + fileName);
// String name = fileName.substring(fileName.lastIndexOf("\\"));//在服务端调试用这两句
// FileOutputStream fout = new FileOutputStream(dir_img_head + name);
fout.write(imgData);
fout.close();
} catch (FileNotFoundException e) {
result += " save img fileE-->";
e.printStackTrace();
} catch (IOException e) {
result += " save img ioE-->";
e.printStackTrace();
} catch (Exception e) {
result += " Unkown"+e.getMessage()+"-->";
e.printStackTrace();
}
result += " img received-->";
}
}
}
} catch (Exception e) {
result += " Unkown"+e.getMessage()+"-->";
}
}
else {
result += " is not multi..";
}
try {
DataOutputStream stream = new DataOutputStream(response.getOutputStream());
stream.writeUTF(result);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
由于没法两端一块调试,因此用了个字符串result希望在android端调试时看看服务端都执行到什么地方了,但是由于最后statusCode不是200而是500,500解释是服务端有意外错误,但是基本捕获了所有异常啊,而且铁定该给客户端返回result值的。

android端:
public boolean regist(User user, Bitmap bitmap, String headName) {

boolean result = false;

/***通过字节流传输bitmap*/
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] imgData = null;
try {
bitmap.compress(CompressFormat.JPEG, 100, bout);
imgData = bout.toByteArray();
bout.close();
} catch (IOException e1) {
e1.printStackTrace();
}

HttpPost request = HttpUtil.getHttpPost(Config.SERVER + Config.SERVLET_REGIST);

/***采用httpmime中的方法封装普通参数以及文件(图片)信息*/
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
try {
entity.addPart(PARAM_CMD, new StringBody(CMD_REGIST));
entity.addPart(PARAM_IMG_HEAD, new ByteArrayBody(imgData, headName));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
request.setEntity(entity);

try {
HttpResponse response = HttpUtil.getHttpResponse(request);
if (response.getStatusLine().getStatusCode() == 200) {
DataInputStream din = new DataInputStream(
new ByteArrayInputStream(EntityUtils.toByteArray(response.getEntity())));
String serverResult = din.readUTF();
Log.i("blogproject", serverResult);
if (serverResult.equals(RESULT_OK)) {
result = true;
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return result;
}
如上,调试观察response携带的statusCode总为500
...全文
323 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruixin456 2014-03-17
  • 打赏
  • 举报
回复
问下楼主解决了么?遇到同样情况,求交流

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧