文件流的形式:
@Multipart
@POST("/upload")
LiveData<ApiResponse<String>> voucherUpload(@Part MultipartBody.Part part);
public LiveData<ApiResponse<String>> getVoucherUpload(LiveData path) {
LiveData voucherData = Transformations.switchMap(data, input -> {
File file = new File(path);
RequestBody fileRQ = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("picture", file.getName(), fileRQ);
return getApiService().voucherUpload(part);
});
return voucherData;
}
方式二:
public static Call<Bean> upload(UploadApi api,byte[] img) {
Map<String, Object> params = new HashMap<>();
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), img);
return api.upload(params,requestBody);
}
@Multipart
@POST("upload")
Call<Bean> upload(@QueryMap Map<String, Object> maps, @Part("img\"; filename=\"img.jpg\"")RequestBody img);
MediaType.parse("multipart/form-data") 对应 @Multipart
@Part("img\"; filename=\"img.jpg\"")RequestBody img
img是上传的时候,参数名
文件转为二进制:
/***
* @param spec 图片路径
* @return url请求结果
*/
public static byte[] BufferStreamForByte(String spec) {
byte[] content = null;
try {
BufferedInputStream bis = null;
ByteArrayOutputStream out = null;
try {
FileInputStream input = new FileInputStream(spec);
bis = new BufferedInputStream(input, 1024);
byte[] bytes = new byte[1024];
int len;
out = new ByteArrayOutputStream();
while ((len = bis.read(bytes)) > 0) {
out.write(bytes, 0, len);
}
bis.close();
content = out.toByteArray();
} finally {
if (bis != null)
bis.close();
if (out != null)
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return content;
}