Android基于OkHttp实现文件上传功能 本文实例为大家分享了Android基于OkHttp实现文件上传的具体代码,供大家参考,具体内容如下 一.相关概述 Android请求访问服务端大多数情况下依旧是使用http协议,故而可以参照web端的数据传输形式来实现. multipart/form
本文实例为大家分享了Android基于OkHttp实现文件上传的具体代码,供大家参考,具体内容如下
一、相关概述
- Android请求访问服务端大多数情况下依旧是使用http协议,故而可以参照web端的数据传输形式来实现。
- multipart/form-data是浏览器提交表单上传文件的一种方式。
- 有关于http的get,post请求大家可以自行百度了解。
- OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟问题。
二、简单使用
1:添加依赖
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okio:okio:1.12.0'
2:编写UploadUtil类
package com.example.clientapplication.utils;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class UploadUtil {
private OkHttpClient okHttpClient;
private UploadUtil(){
okHttpClient = new OkHttpClient();
}
/**
* 使用静态内部类的方式实现单例模式
*/
private static class UploadUtilInstance{
private static final UploadUtil INSTANCE = new UploadUtil();
}
public static UploadUtil getInstance(){
return UploadUtilInstance.INSTANCE;
}
/**
* @param url 服务器地址
* @param file 所要上传的文件
* @return 响应结果
* @throws IOException
*/
public ResponseBody upload(String url, File file) throws IOException {
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(),
RequestBody.create(MediaType.parse("multipart/form-data"), file))
.build();
Request request = new Request.Builder()
.header("Authorization", "ClientID" + UUID.randomUUID())
.url(url)
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
return response.body();
}
}
3:使用Util完成文件上传
/**
* 创建线程实现文件的上传
* @param view
*/
public void upload(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
UploadUtil.getInstance().upload(path,file);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
三、注意事项
在文件上传时我用的是利用Intent获取所选文件的Uri,使用了大佬的RealPathFromUriUtils工具类,get到文件的path,然后实例化了File作为参数使用upload方法。
在定义UploadUtil时我使用了单例模式,在保证线程安全的前提下节省资源,提升服务器访问速率。觉得麻烦的可以不使用单例。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
沃梦达教程
本文标题为:Android基于OkHttp实现文件上传功能
基础教程推荐
猜你喜欢
- iOS开发使用XML解析网络数据 2022-11-12
- Android开发Compose集成高德地图实例 2023-06-15
- iOS开发 全机型适配解决方法 2023-01-14
- IOS获取系统相册中照片的示例代码 2023-01-03
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- Flutter进阶之实现动画效果(三) 2022-10-28
- Android实现短信验证码输入框 2023-04-29
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07