引言 Retrofit + Okhttp 上传文件到亚马孙s3服务器
场景:Android项目中有个上传日志的功能,后台会通过接口返回一个S3预签名的URL,我通过这个URL使用PUT上传文件。文件上传成功后,我在S3仓库拿到的文件打不开,明显是文件损坏。
接口描述:获取一个S3上传文件签名, url签名调用时,使用[put]方法, body是文件二进制流
代码分析
网络请求框架是Retrofit + Okhttp
方法-(文件上传成功后,我在S3仓库拿到的文件打不开,明显是文件损坏。)
接口
/**
* 上传日志
*
* @param file
* @return
*/
@Multipart
@PUT
Call<ResponseBody> uploadFile(@Url String url, @Part MultipartBody.Part file);
请求方式
ProgressRequestBody requestFile = new ProgressRequestBody(file, "application/octet-stream", new ProgressRequestBody.UploadCallbacks() {
@Override
public void onProgressUpdate(int percentage) {
showProgress(percentage);
}
@Override
public void onError() {
}
@Override
public void onFinish() {
MLog.i(TAG, "onFinish ");
}
});
MultipartBody.Part body =
MultipartBody.Part.create(requestFile);
Call<ResponseBody> call = RetrofitClient.getDebugRetrofit().create(ICloud.class)