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-databoundary=" + 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访问,上传,用了三个方法 》
如果是图片,一般我们采用将图片转换为base64编码的字符串,然后向服务器post,服务器接收后,再解码base64字符串为图片保存,从而实现上传。貌似从Android上上传图片以外的其它文件的需求也比较小吧?欢迎分享,转载请注明来源:内存溢出
评论列表(0条)