要使用Retrofit上传文件,可以使用MultipartBody.Part。以下是一个示例解决方案:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
public interface FileUploadService {
@Multipart
@POST("upload")
Call uploadFile(@Part MultipartBody.Part file);
}
private void uploadFile(Uri fileUri) {
// 创建RequestBody实例,用于封装文件
File file = new File(fileUri.getPath());
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
// 使用MultipartBody.Part封装RequestBody
MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
// 创建FileUploadService实例
FileUploadService service = retrofit.create(FileUploadService.class);
// 提交文件
Call call = service.uploadFile(filePart);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
// 文件上传成功
}
@Override
public void onFailure(Call call, Throwable t) {
// 文件上传失败
}
});
}
在这个示例中,假设文件将被上传到服务器的/upload
端点。uploadFile()
方法接受一个Uri
参数,该参数表示要上传的文件的位置。该方法使用MultipartBody.Part
将文件封装为RequestBody
,并将其传递给服务接口中的uploadFile()
方法。
通过调用enqueue()
方法发送异步请求,并在回调方法中处理响应。在onResponse()
方法中,您可以执行适当的操作来处理成功的上传,而在onFailure()
方法中,您可以处理失败的上传。