在上传图片的过程中 我们经常上传一张图片的同时还要上传 其他一些附加信息 这里我是使用Retrofit 进行图片上传的 这里我就 已经认为你会Retrofit的基本使用了
现在上关键代码
1.
MultipartBody.Builder form = new MultipartBody.Builder();
form.setType(MultipartBody.FORM);
//设置表单字段 form.addFormDataPart("width", width); form.addFormDataPart("height", height);
//设置图片信息
File file = new File("图片地址");
RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file);form.addFormDataPart( "upfile", file.getName(), fileBody); Builder 是MultipartBody中的一个内部类 其实就是建造者模式 利用这个建造者 设置 MIME 类型, 这里是表单形式,接下来 就是设置 文字 信息 ,最重要的就是RequestBody的出创建,里面包含了 请求信息 。
填写好要上传的字段之后 创建MultipartBody partBody = form.build();
那Retrofit如何使用这个 partBody 呢
/* * 发表图片上传 * @param file * @return */ @POST("api/image/upload") Call如果你使用过Retrofit的话 看到 这点 应该就不会再问啥了uploadPublishImage(@Body MultipartBody data);
2.
上面这中方式比较优雅 下面还有另一种 图片 上传方式
RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpeg"), new File(“文件路径"));
同样也是 创建一个RequestBody 那如何使用呢 看请求代码
@Multipart @POST("api/image/upload") CalluploadImage(@Part("upfile\"; filename=\"image.jpg\"") RequestBody file,@Part("width") int width, @Path("height")int height);
下面的这段代码看着比较乱 明显没有第一种看着 优雅
3.还有一种情况 就是我们有时候可能 一个接口要一次上传好多字段,结果我们一个请求接口里面总是写好多的参数,看起来乱乱的,一个不小心就要写错位置
那如何比较清晰一点呢,很简单 就是利用Map, Map的数据结构 就是键值对, key就是你要上传的参数名称,value就是你要上传的值
Map这个 map你可以无限写参数 对应也很明确,再也不用一个请求接口写好多参数,老长老长了。data = new HashMap<>(); data.put("type", type); data.put("reason", reason); data.put("other_id",id);
那如何请求呢
/* 举报接口 * @return */ @FormUrlEncoded @POST("api/report/create") CallreportSomeBody(@FieldMap Map data);
就是用到了 这几几个注解 千万不要写错了 一个不可以少 有了这几个 以后就可以优雅的写很多参数了,上面的这个是post请求,那就有人要问了,那get请求如果也是很多参数那怎么办
当然 有@FieldMap这个注解 就会有@QueryMap这个注解 对应于Get请求,其他的 请自行补脑。