android中数据上传到服务器怎么实现

android中数据上传到服务器怎么实现,第1张

服务器端写个servlet,然后在doPost()方法里处理客户端上传文件,大概代码:DiskFileItemFactory factory = new DiskFileItemFactory()factory.setSizeThreshold(1024 * 1024)// 设置最多只允许在内存中存储的数据, 单位:字节factory.setRepository(cachepath)// 设置一旦文件大小超过设定值时数据存放的目录 ServletFileUpload srvFileUpload = new ServletFileUpload(factory)srvFileUpload.setSizeMax(1024 * 1024 * 1024)// 设置允许用户上传文件大小, 单位:字节// 开始读取上传信息List fileItems = nulltry { fileItems = srvFileUpload.parseRequest(request)} catch (Exception e) { System.out.println("获取上传信息。。。。。。失败")}// 依次处理每个上传的文件Iterator iter = fileItems.iterator()while (iter.hasNext()) { FileItem item = (FileItem) iter.next()// 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) {// 取出文件域的所有表单信息 } else { // 取出不是文件域的所有表单信息 }}

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-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上上传图片以外的其它文件的需求也比较小吧?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12000795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存