您的位置:首页 > 理论基础 > 计算机网络

Android HttpClient上传文件与Httpconnection知识小结

2012-03-17 14:24 579 查看
Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。

1、使用HttpConection上传文件。将文件转换成表单数据流。主要的思路就自己构造个http协议内容,服务端解析报文获得表单数据。代码片段:

[java] view plaincopy

HttpURLConnection con;

try {

con = (HttpURLConnection) url.openConnection();

con.setConnectTimeout(C_TimeOut);

/* 允许Input、Output,不使用Cache */

con.setDoInput(true);

con.setDoOutput(true);

con.setUseCaches(false);

/* 设置传送的method=POST */

con.setRequestMethod("POST");

/* setRequestProperty */

con.setRequestProperty("Connection", "Keep-Alive");

con.setRequestProperty("Charset", "UTF-8");

con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);

/* 设置DataOutputStream */

DataOutputStream ds = new DataOutputStream(con.getOutputStream());

FileInputStream fStream = new FileInputStream(file);

/* 设置每次写入1024bytes */

int bufferSize = 1024;

byte[] buffer = new byte[bufferSize];

int length = -1;

/* 从文件读取数据至缓冲区 */

while((length = fStream.read(buffer)) != -1)

{

/* 将资料写入DataOutputStream中 */

ds.write(buffer, 0, length);

}

fStream.close();

ds.flush();

ds.close();

可以参考

①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》 (http://bertlee.iteye.com/blog/1134576)。

②《关于android Http访问,上传,用了三个方法 》

2、使用Android HttpClient类上传参数。下面我在网上搜到得代码,忘记出处了

[java] view plaincopy

private static boolean sendPOSTRequestHttpClient(String path,

Map<String, String> params) throws Exception {

// 封装请求参数

List<NameValuePair> pair = new ArrayList<NameValuePair>();

if (params != null && !params.isEmpty()) {

for (Map.Entry<String, String> entry : params.entrySet()) {

pair.add(new BasicNameValuePair(entry.getKey(), entry

.getValue()));

}

}

// 把请求参数变成请求体部分

UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");

// 使用HttpPost对象设置发送的URL路径

HttpPost post = new HttpPost(path);

// 发送请求体

post.setEntity(uee);

// 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息

DefaultHttpClient dhc = new DefaultHttpClient();

HttpResponse response = dhc.execute(post);

if (response.getStatusLine().getStatusCode() == 200) {

Log.i("http", "httpclient");

return true;

}

return false;

}

3、使用httpClient上传文字信息和文件信息。使用httpClient上传文件非常的方便。不过需要导入apache-mime4j-0.6.jar 和httpmime-4.0.jar两个.jar包。

[java] view plaincopy

// 封装请求参数

MultipartEntity mpEntity = new MultipartEntity();

if (params != null && !params.isEmpty()) {

for (Map.Entry<String, String> entry : params.entrySet()) {

StringBody par = new StringBody(entry.getValue());

mpEntity.addPart(entry.getKey(), par);

}

}

// 图片

if (!imagepath.equals("")) {

FileBody file = new FileBody(new File(imagepath));

mpEntity.addPart("photo", file);

}

// 使用HttpPost对象设置发送的URL路径

HttpPost post = new HttpPost(path);

// 发送请求体

post.setEntity(mpEntity);

// 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息

DefaultHttpClient dhc = new DefaultHttpClient();

HttpResponse response = dhc.execute(post);

FileBody类可以把文件封装到表单中,实现附件的上传。

关于httpClient上传文件可以参考链接: http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76721&page=1
需要用的的ja下载地址r:http://download.csdn.net/detail/china1988s/3791514

参考:

①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》 (http://bertlee.iteye.com/blog/1134576)。

②《关于android Http访问,上传,用了三个方法 》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: