使用一般的上传方法一般上传不能超过2m的文件,也非常容易中断和出错,于是本人打算使用xutils框架进行文件上传开发,话不多说直接上源码
首先要下载这个类库的jar包,地址:https://github.com/wyouflf/xUtils
android端代码:
添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
package com.example.download_test;
import java.io.File;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class UploadActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload);
new Thread(){
public void run() {
System.out.println("上传线程启动");
RequestParams params = new RequestParams();
params.addHeader("head", "1");
params.addQueryStringParameter("head", "2");
// 只包含字符串参数时默认使用BodyParamsEntity,
// 类似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。
params.addBodyParameter("222", "22");//相当于与文件同时发给服务器的字符串对象,在servlet中可以通过遍历FileItem的list得到
// 加入文件参数后默认使用MultipartEntity("multipart/form-data"),
// 如需"multipart/related",xUtils中提供的MultipartEntity支持设置subType为"related"。
// 使用params.setBodyEntity(httpEntity)可设置更多类型的HttpEntity(如:
// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。
// 例如发送json参数:params.setBodyEntity(new StringEntity(jsonStr,charset));
params.addBodyParameter("file", new File("/storage/emulated/0/Trinea/MeiLiShuo-7.apk"));//设置要上传文件的本地路径,<span style="font-family: Arial, Helvetica, sans-serif;">第一个参数就是html中<input>标签中的name属性,是与服务器传输文件字节流以外的文本信息的重要渠道,在servlet中这样获得fileitem.getFieldName();</span>
HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.POST,
"http://192.168.1.112:8080/auto_serve/servlet/UploadImage",//设置要上传到的url
params,
new RequestCallBack<String>() {
@Override
public void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
System.out.println("上传终止");
}
@Override
/**
* 获取上传进度的方法
*/
public void onLoading(long total, long current,//这个方法大约一秒会执行一次
boolean isUploading) {
// TODO Auto-generated method stub
System.out.println("目前上传大小"+current+"总大小"+total);
super.onLoading(total, current