android的自带的httpClient 怎么上传文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android的自带的httpClient 怎么上传文件相关的知识,希望对你有一定的参考价值。

参考技术A 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访问,上传,用了三个方法 》本回答被提问者和网友采纳

以上是关于android的自带的httpClient 怎么上传文件的主要内容,如果未能解决你的问题,请参考以下文章

android的自带的httpClient 怎么上传文件

android和httpClient

httpclient4怎么使用请求超时后的重试?

httpclient (phpmyadmin) 无法在 Android 4.0+ 上运行

Android 6.0 使用 Apache HttpClient

Android studio 中想用 HttpClient 下载网络图片,却没有 HttpClient 以及相关的类