Android基于OkHttp实现文件上传功能
作者:凌风.983
这篇文章主要为大家详细介绍了Android基于OkHttp实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了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时我使用了单例模式,在保证线程安全的前提下节省资源,提升服务器访问速率。觉得麻烦的可以不使用单例。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- OkHttp拦截器在Android网络中的使用和工作原理
- Android入门之使用OKHttp多线程下载文件
- Android 使用 okhttp3和retrofit2 进行单文件和多文件上传
- Android使用OKhttp3实现登录注册功能+springboot搭建后端的详细过程
- Android的简单前后端交互(okHttp+springboot+mysql)
- Android Okhttp断点续传面试深入解析
- Android使用OkHttp发送post请求
- Android使用OkHttp进行网络同步异步操作
- Android视频/音频缓存框架AndroidVideoCache(Okhttp)详解
- Android OkHttp实现全局过期token自动刷新示例
- OkHttp原理分析小结