在项目中使用流的方式给服务器传递数据,网上大部分使用retrofit上传图片大致可以分为三种,一种是把参数和图片的数据一起封装为一个集合进行数据传递;第二种是使用map把所有的数据以键值对的形式进行传递;第三种是把图片和参数分开传递。
以下是以第三种方式进行上传图片:
JSONObject reJson = new JSONObject();
try {
reJson.put("name", );
reJson.put("password", );
reJson.put("ID",);
reJson.put("Token", );
} catch (JSONException e) {
e.printStackTrace();
}
File file = new File(path);
RequestBody body = RequestBody.create(null, file);
MultipartBody.Part part = MultipartBody.Part
.createFormData("file", file.getName(), body);
RetrofitRequest.getInstance().upLoadImage(reJson.toString(), part);
public void upLoadImage(String json, MultipartBody.Part part){
RequestBody requestBody = RequestBody.create(
MediaType.parse("multipart/form-data"),
//加密json AESActivity.Encrypt(json)
AESActivity.Encrypt(json));
ServiceFactory.createService(UpLoadImageInterface.class)
.upLoadImage(requestBody,part)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CustomSubscribe<String>() {
@Override
public void onCompleted() {
}
@Override
public void onNext(String bean) {
}
});
}
//图片,注意传参时的("mmm")这个是随便传递,但是必须写
interface UpLoadImageInterface{
@Multipart
@POST("UpLoadImage")
Observable<String> upLoadImage(@Part ("mmm")RequestBody requestBody,@Part MultipartBody.Part part);
}
以上是请求图片的全部流程。
其中对Content-type 可以参考https://blog.csdn.net/u010335298/article/details/51862624这篇文章