以前用的都是okhttp直接上传的,其实也没什么太不好的地方,只是后有其他需求,需要上传多张图片,而后台给的是上传单张图片的接口,之前是写的回调里边套回调,虽然代码逻辑没有什么问题,但是代码混乱,不易于维护,我是后来才加入Rxjava的框架
那么我们就看看怎么来写,具体用法原理什么的我就不重复造轮子了,自己搜索,肯定一搜一堆
直接上代码
没用Retrofit之前,单纯使用Okhttp的代码
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"file\"; filename=\""+fileName+".png\""), fileBody)
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
}
});
使用Retrofit之后
/** 上传图片 */
@Multipart
@POST
Observable<UploadImgSuccessBean> uploadImages(
@Url String url,
@Part MultipartBody.Part part);
File file = new File(path);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
uploadImages(url,part)
再加上rxjava的操作符一起使用,可以完美解决后台接口是单张上传,但是需求是多张上传的场景
在网上能搜到很多Retrofit上传图片的方法,也不能直接copy,你需要看好一些字段的命名和你们后台的是否符合