Retrofit2学习之六:上传单个文件
Retrofit2 上传需要用到 Multipart,使用 MultipartBody.Part 标识文件体。
自定义Headers
创建业务请求接口
public interface Api {
/**
* 上传单个文件
* @param description
* @param file
* @return
*/
@Multipart
@POST("upload")
Call<ResponseBody> uploadFile(@Part("description") RequestBody description, @Part MultipartBody.Part file);
}
创建一个Retrofit的实例,然后利用Retrofit实例创建接口对象和调用接口方法
public static final String MULTIPART_FORM_DATA = "multipart/form-data";
@NonNull
private RequestBody prepareFromPart(String description) {
return RequestBody.create(MediaType.parse(MULTIPART_FORM_DATA), description);
}
/**
* 一个域对应一个文件
* @param partName
* @param filePath
* @return
*/
private MultipartBody.Part prepareFilePart(String partName, String filePath) {
File file = new File(filePath);
// 为file建立RequestBody实例
RequestBody requestFile = RequestBody.create(MediaType.parse(MULTIPART_FORM_DATA), file);
// MultipartBody.Part借助文件名完成最终的上传
return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
}
public void uploadFile(View view) {
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "generated.apk";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SERVER_ADDRESS)
.build();
api = retrofit.create(Api.class);
// 添加Form的part
RequestBody description = prepareFromPart("hello, this is description speaking");
// 创建文件的part (photo, video, ...)
MultipartBody.Part fileBody = prepareFilePart("file", filePath);
api.uploadFile(description, fileBody).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//在UI主线程运行
if (response.isSuccessful()) {
Log.i(TAG, "上传成功");
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.i(TAG, "上传失败: " + t.getLocalizedMessage());
}
});
}
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/retrofit2-learning-6-upload-a-single-file/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
Retrofit2学习之六:上传单个文件
Retrofit2 上传需要用到 Multipart,使用 MultipartBody.Part 标识文件体。
自定义Headers
创建业务请求接口
public interface Api {
/**
* 上传单……
文章目录
关闭
共有 0 条评论