拍照或者从相册选取图片需要申请权限,这一步做完了以后,经过一系列操作之后在onActivityResult方法中会有回调,通过switch返回的requestCode区分是拍照还是从相册选取,本地需要指定一个File,用于存放选中的图片。
这里假设图片已经拿到了。
@Multipart
@POST("******************************")
上传图片需要使用post请求,同时还需要使用Multipart
方法名(@PartMap Map<String,RequestBody> map,
@Part List<MultipartBody.Part> images);
参数一是你需要传的参数
在代码中:
private RequestBody getRequestBody(String value){
return RequestBody.create(MediaType.parse(Config.UPLOAD.UPLOAD_FILE_FORMAT), value);
}
这个是用于生成需要的RequestBody ,value是需要对应的值
其中UPLOAD_FILE_FORMAT的值是:
public static final String UPLOAD_FILE_FORMAT = "multipart/form-data";
生成好RequestBody 后,在代码中new一个map:
Map<String,RequestBody> map = new LinkedHashMap<>();
map.put("username",getRequestBody(userName));
******
这样就构建好了传给服务器的第一个参数了。
如果参数少的话,也可以不用partMap
@Part("username") RequestBody userName
接下来看一下第二个参数,这是多图,是一个文件的集合:
@Part List<MultipartBody.Part> images
如果是一张图片,可以写成这样:
@Part MultipartBody.Part file
直接看一下传多图吧:
下面的代码是构建单个的MultipartBody.Part
private MultipartBody.Part getFilePart(String partName,File file,String fileName){
RequestBody requestBody = RequestBody.create(MediaType.parse(Config.UPLOAD.UPLOAD_FILE_FORMAT), file);
return MultipartBody.Part.createFormData(partName, fileName, requestBody);
}
这里的partName由你自己定义。多图就是使用一个list就好了。
这样就可以愉快地上传了