Android multipartentity的用法
最近写一个程序,android手机端上传多个图片到asp.net服务器端,使用httpclient,在网上查到了使用multipartentity。上传测试时总是出现(500)Internal Server Error,最后查出原来是文件大小超出了服务器限制,在项目的web.config中添加:
<system.web>
<HttpRuntime maxRequestLength="409600" executionTimeout="60" />
</system.web>
对于简单的Post请求,使用UrlEncodedFormEntity,代码如下:
public HttpPost makeHttpPost(String url,HashMap<String, String> map) throws Exception
{
HttpPost post = new HttpPost(url);
List<NameValuePair> params =
new ArrayList<NameValuePair>();
for(String key : map.keySet())
{
//封装请求参数
params.add(new BasicNameValuePair(key
, map.get(key)));
}
// 设置请求参数
post.setEntity(new UrlEncodedFormEntity(
params));
return post;
}
若需上传多文件,则要使用MultipartEntity,具体代码如下:
public HttpPost sendPicture(String url,HashMap<String, String> map) { HttpPost post = new HttpPost(url); MultipartEntityBuilder m = MultipartEntityBuilder.create(); m.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); for(int i = 0;i<picPaths.size();i++) { File pic = new File(picPaths.get(i)); //FileBody fb = new FileBody(pic); //m.addPart("img"+i,new FileBody(pic)); m.addBinaryBody("img"+i, pic); } // m.addPart("img", new FileBody(new File(picPaths.get(0))));//new ByteArrayBody for(String key : map.keySet()) { Log.i("SENDTAG",(String)map.get(key)); try { // post.getParams().setParameter(key, (String)map.get(key)); m.addPart(key,new StringBody((String)map.get(key))); //m.addTextBody(key, (String)map.get(key)); } catch (Exception e) { e.printStackTrace(); } } post.setEntity(m.build()); return post; }
代码已测试可用。