这俩天做一个和php后台交互上传图片文字的需求, 看了一下网络上的案例,大概好多都是将文件转换为字节流传的,而且好多都是照搬,搜索一个,点进去都出自一人之手,各种转发…然后就不说了,保留个人意见.
我测试了百度 “android上传图片给php后台” 上面传的最热的流操作的方法, 可行,成功将图片传给了后台,但是由于种种原因,个人选择了换种方式,直接传递图片地址试试.决定用okHttp来上传图片、文字数据.这里直接使用okhttp-utils,鸿神的一个okhttp二次封装的库,地址:https://github.com/hongyangAndroid/okhttp-utils 有兴趣的可以去看看
android studio 添加
compile project(':okhttputils')
Eclipse 也可以去上面的地址添加
//List集合放的图片地址
private List<String> path=new ArrayList<>();
//其他代码 略略略 直接看上传这一块
....
//先测试一张图片和文字上传给php
File file=new File(path.get(0));
OkHttpUtils.post()
.url(Connector.PUBLISH)
.addFile("upfile",path.get(0),file)//传递一张图片 (前面的字段和php协商好,保持一致都)
.addParams("imgNum",tag) // 个人根据需求添加的判断字段,直接无视...
.addParams("water","20") //...无视
.addParams("count","10") //..无视
.addParams("title",writing_title.getText().toString()) //editText取得的文字内容
.addParams("articles",writing_content.getText().toString()) //editText取得的文字内容
.build()
.execute(new Callback() {
//异步执行,回调三个方法
@Override
public Object parseNetworkResponse(Response response) throws IOException {
return response;
}
@Override
public void onError(Request request, Exception e) {
Log.e("flag", "--------------------->onError: " +request);
}
@Override
public void onResponse(Object response) {
Response response1 = (Response) response;
try {
String string = response1.body().string();
} catch (IOException e) {
e.printStackTrace();
}
}
});
注意这里异步执行回调的方法,第一个是异步返回的结果,但是不是ui线程, 继续将response 返回,
return response; 第二个是error, 第三个用来接收第一个返回来的结果, 由于是Object 类型,直接强转为
okHttp的Response,然后就得到返回的数据了…测试,成功!php后台开心的获得了图片和文字,恩,不错..
多图上传直接添加一个for循环遍历一下集合中的图片地址就行, OK.
多图上传代码:
PostFormBuilder url = OkHttpUtils.post().url(Connector.PUBLISH);
for (int i = 0; i <path.size() ; i++) {
file=new File(path.get(i));
url.addFile("upfile",path.get(i),file);
}
url.addParams("imgNum",tag) // 个人根据需求添加的判断字段,直接无视...
.addParams("water","20")
.addParams("count","10")
.addParams("title",writing_title.getText().toString())
.addParams("articles",writing_content.getText().toString())
.build()
.execute(new Callback() {
......
多图加文字上传成功,php很开心的又接收了多张图片..