Android使用Retrofit上传文件功能
作者:最萌小熊猫 时间:2022-08-28 08:42:38
本文实例为大家分享了Android使用Retrofit上传文件的具体代码,供大家参考,具体内容如下
一、封装RetrofitManager
public class RetrofitManager {
private static RetrofitManager retrofitManager;
private Retrofit retrofit;
private RetrofitManager() {}
public static RetrofitManager getInstance() {
if (retrofitManager == null) {
synchronized (RetrofitManager.class) {
if (retrofitManager == null) {
retrofitManager = new RetrofitManager();
}
}
}
return retrofitManager;
}
public Retrofit getRetrofit() {
if (retrofit == null) {
// 添加日志 *
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
// 拦截等级为body(可以打印出完整的网络请求)
httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY);
// 使用OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1,TimeUnit.MINUTES)
.build();
// 创建出Retrofit
retrofit = new Retrofit.Builder()
// 使用Gson转换工厂
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
// 基础Url
.baseUrl("http://**.**.**.**:**/")
.client(okHttpClient)
.build();
}
return retrofit;
}
}
二、上传单一文件
1.在Api接口中声明方法
@Multipart
@POST("fileUpload")
Observable<String> upload(@Part List<MultipartBody.Part> parts);
2.实例化api接口
// 实例化api接口
Api api = RetrofitManager.getInstance().getRetrofit().create(Api.class);
3.构建参数
File file = new File("/sdcard/DCIM/Camera/**.jpg");
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody multipartBody = new MultipartBody.Builder()
.addFormDataPart("file", "fileName.jpg", body)
.setType(MultipartBody.FORM)
.build();
4.提交请求
api.upload(parts)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onNext(String s) {
Log.i("--",s); // 请求结果
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
三、上传多个文件
1.在Api接口中声明方法
@Multipart
@POST("fileUploadMore")
Observable<String> uploadMore(@PartMap Map<String, List<MultipartBody.Part>> multiMap);
2.实例化api接口
// 实例化api接口
Api api = RetrofitManager.getInstance().getRetrofit().create(Api.class);
3.构建参数
File file = new File("/sdcard/DCIM/Camera/**.jpg");
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody multipartBody1 = new MultipartBody.Builder()
.addFormDataPart("file", "fileName1.jpg", body)
.setType(MultipartBody.FORM)
.build();
MultipartBody multipartBody2 = new MultipartBody.Builder()
.addFormDataPart("file", "fileName2.jpg", body)
.setType(MultipartBody.FORM)
.build();
MultipartBody multipartBody3 = new MultipartBody.Builder()
.addFormDataPart("file", "fileName3.jpg", body)
.setType(MultipartBody.FORM)
.build();
MultipartBody multipartBody4 = new MultipartBody.Builder()
.addFormDataPart("file", "fileName4.jpg", body)
.setType(MultipartBody.FORM)
.build();
// 把所有文件放入map集合中
Map<String, List<MultipartBody.Part>> parts = new HashMap<>();
parts.put("f1",multipartBody1.parts());
parts.put("f2",multipartBody2.parts());
parts.put("f3",multipartBody3.parts());
parts.put("f4",multipartBody4.parts());
4.提交请求
api.uploadMore(parts)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onNext(String s) {
Log.i("--",s); // 请求结果
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
来源:https://blog.csdn.net/weixin_42600398/article/details/121554736
标签:Android,Retrofit,上传文件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
简单了解Spring中常用工具类
2021-09-24 10:44:28
MyBatis全局配置文件详解
2021-09-19 10:13:32
![](https://img.aspxhome.com/file/2023/3/69093_0s.png)
C++ 反汇编之关于Switch语句的优化措施
2023-09-10 15:00:15
![](https://img.aspxhome.com/file/2023/5/99285_0s.png)
基于C#实现语音识别功能详解
2023-07-12 18:55:24
![](https://img.aspxhome.com/file/2023/7/96377_0s.png)
Java 生产者/消费者问题实例详解
2023-02-26 01:23:36
![](https://img.aspxhome.com/file/2023/3/62053_0s.gif)
理解Java中的内存泄露及解决方法示例
2023-04-24 23:19:51
![](https://img.aspxhome.com/file/2023/7/78987_0s.png)
Unity UI实现拖拽旋转
2023-04-10 06:44:59
![](https://img.aspxhome.com/file/2023/9/74839_0s.jpg)
Servlet注解之@WebInitParam多个InitParam的使用
2023-08-04 13:43:01
C#线程同步的几种方法总结
2022-01-31 19:49:06
![](https://img.aspxhome.com/file/2023/8/81068_0s.png)
Spring及Mybatis整合占位符解析失败问题解决
2022-08-13 06:42:49
关于C#理解装箱与拆箱
2023-06-18 21:07:50
logback使用filter过滤日志操作
2022-07-11 03:20:27
![](https://img.aspxhome.com/file/2023/5/63765_0s.jpg)
基于Java代码实现支付充值的通用流程
2021-09-04 00:48:45
java异常与错误处理基本知识
2023-11-25 10:44:59
怎样使用PowerMockito 测试静态方法
2022-06-18 08:28:59
![](https://img.aspxhome.com/file/2023/7/86777_0s.jpg)
聊聊Redis二进制数组Bitmap
2021-07-26 11:51:57
java代码实现MD5加密及验证过程详解
2023-09-26 02:50:45
springboot2.x整合tkmapper的示例代码
2021-09-19 11:56:59
Java制作智能拼图游戏原理及代码
2022-08-02 21:46:57
Java基础之关键字final详解
2022-01-28 00:55:31