请问怎样用Retrofit通过post把String参数和二进制流一起上传到服务器?
现在在用face++的detectAPI进行人脸分析,它的请求参数如下:
image_file参数我我不知道怎么跟其他字符串类型的参数一起post。麻烦大神指点!
回答:
我用的 retrofit 版本是 2.1.0。
方法这样定义;@Multipart
@POST(NetUrlConstant.URL_UPLOAD_PHOTO)
Call<UploadPhotoBean> uploadPhoto(@PartMap Map<String, RequestBody> map);
传入的是个 Map ,下面来创建这个 map :
File file = new File("图片路径");
Map<String, RequestBody> map = new HashMap<>();
map.put("api_key", parseRequestBody("你的参数值");
map.put("api_secret", parseRequestBody("你的参数值");
map.put("iamge_url", parseRequestBody("你的参数值");
map.put("return_landmark", parseRequestBody(你的 int 值+""));//int 也转成 string 生成 Body, 服务端取下来是 int ;
map.put("return_attributes", parseRequestBody("你的参数值");
map.put(RetrofitManager.parseImageMapKey("image_file",file.getName()),parseImageRequestBody(file));//这里是你的文件。
上面用到封装的几个方法 :
public static RequestBody parseRequestBody(String value) {
return RequestBody.create(MediaType. parse("text/plain"), value);
}
public static RequestBody parseImageRequestBody(File file) {
return RequestBody.create(MediaType. parse("image/*"), file);
}
public static String parseImageMapKey(String key, String fileName) {
return key + "\"; filename=\"" + fileName;
}
回答:
这个应该是上传图片的情况吧,参数像description,具体看后台需要什么字段添加,不过很奇怪为什么要上传文件又要上传路径,直接上传路径不行?如果是七牛的话,直接上传后拿到地址再提交,还可以加后缀获取缩略图,大概是这样,应该没错,仅供参考
RequestBody description =RequestBody.create(MediaType.parse("multipart/form-data"),
description);
File file = new File(filepath);//
RequestBody requestBody =RequestBody.create(
MediaType.parse("multipart/form-data"), file);
@Multipart
@POST("[接口地址]")
Call<ShowResultBean> upload(
@Part("myfile\"; filename=\"image.png\" ") RequestBody file,
@Part("description") RequestBody description);
回答:
建议多用搜索引擎
答案来自stackoverflow
retrofit 上传multipart文件包括其他参数
以上是 请问怎样用Retrofit通过post把String参数和二进制流一起上传到服务器? 的全部内容, 来源链接: utcz.com/p/179260.html