在使用okhttp上传图片时,遇到服务器无法解析出图片的问题。
但是使用postman测试,又能正常上传。
原代码片段
public static final <T extends Observer<ImageUploadResponse>> void upload(Collection<String> filePath, T observer){
MultipartBody.Builder builder=new MultipartBody.Builder()
.setType(MultipartBody.FORM);
File file=null;
for (String s : filePath) {
file=new File(s);
builder.addFormDataPart("file",file.getName(), RequestBody.create(MediaType.parse("image/jpg"), file));
}
RetrofitProviders.getInstance().uploadImage(builder.build())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
且在。net core 写的图片服务器是正常的。但是在.net的图片服务器上解析不到图片。
通过Charles抓包分析对比成功的请求与失败的请求
发现不同点
可行的请求
Content-Type: multipart/form-data;charset=utf-8; boundary=ae21001f-3002-4988-aa1a-1f91f1d3317a
无法解析的请求
Content-Type: multipart/form-data; boundary=ae21001f-3002-4988-aa1a-1f91f1d3317a
于是修改代码
public static final <T extends Observer<ImageUploadResponse>> void upload(Collection<String> filePath, T observer){
MultipartBody.Builder builder=new MultipartBody.Builder()
.setType(MediaType.parse("multipart/form-data;charset=utf-8"));
File file=null;
for (String s : filePath) {
file=new File(s);
builder.addFormDataPart("file",file.getName(), RequestBody.create(MediaType.parse("image/jpg"), file));
}
RetrofitProviders.getInstance().uploadImage(builder.build())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
问题成功解决