Android基于OkHttp實現(xiàn)文件上傳功能
本文實例為大家分享了Android基于OkHttp實現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下
一、相關(guān)概述
- Android請求訪問服務(wù)端大多數(shù)情況下依舊是使用http協(xié)議,故而可以參照web端的數(shù)據(jù)傳輸形式來實現(xiàn)。
- multipart/form-data是瀏覽器提交表單上傳文件的一種方式。
- 有關(guān)于http的get,post請求大家可以自行百度了解。
- OkHttp是一款優(yōu)秀的HTTP框架,它支持get請求和post請求,支持基于Http的文件上傳和下載,支持加載圖片,支持下載文件透明的GZIP壓縮,支持響應(yīng)緩存避免重復(fù)的網(wǎng)絡(luò)請求,支持使用連接池來降低響應(yīng)延遲問題。
二、簡單使用
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();
? ? }
? ? /**
? ? ?* 使用靜態(tài)內(nèi)部類的方式實現(xiàn)單例模式
? ? ?*/
? ? private static class UploadUtilInstance{
? ? ? ? private static final UploadUtil INSTANCE = new UploadUtil();
? ? }
? ? public static UploadUtil getInstance(){
? ? ? ? return UploadUtilInstance.INSTANCE;
? ? }
?
? ? /**
? ? ?* @param url ? 服務(wù)器地址
? ? ?* @param file ?所要上傳的文件
? ? ?* @return ? ? ?響應(yīng)結(jié)果
? ? ?* @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完成文件上傳
/**
? ? ?* 創(chuàng)建線程實現(xiàn)文件的上傳
? ? ?* @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作為參數(shù)使用upload方法。
在定義UploadUtil時我使用了單例模式,在保證線程安全的前提下節(jié)省資源,提升服務(wù)器訪問速率。覺得麻煩的可以不使用單例。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- OkHttp攔截器在Android網(wǎng)絡(luò)中的使用和工作原理
- Android入門之使用OKHttp多線程下載文件
- Android 使用 okhttp3和retrofit2 進行單文件和多文件上傳
- Android使用OKhttp3實現(xiàn)登錄注冊功能+springboot搭建后端的詳細過程
- Android的簡單前后端交互(okHttp+springboot+mysql)
- Android Okhttp斷點續(xù)傳面試深入解析
- Android使用OkHttp發(fā)送post請求
- Android使用OkHttp進行網(wǎng)絡(luò)同步異步操作
- Android視頻/音頻緩存框架AndroidVideoCache(Okhttp)詳解
- Android OkHttp實現(xiàn)全局過期token自動刷新示例
- OkHttp原理分析小結(jié)
相關(guān)文章
詳解Android中Fragment的兩種創(chuàng)建方式
本篇文章主要介紹了Android中Fragment的兩種創(chuàng)建方式,具有一定的參考價值,有興趣的可以了解一下。2016-12-12
Android實現(xiàn)ListView數(shù)據(jù)動態(tài)加載的方法
這篇文章主要介紹了Android實現(xiàn)ListView數(shù)據(jù)動態(tài)加載的方法,通過ListView控件綁定setOnScrollListener方法簡單實現(xiàn)動態(tài)加載數(shù)據(jù)的功能,需要的朋友可以參考下2016-01-01
Android項目實戰(zhàn)教程之高仿網(wǎng)易云音樂啟動頁實例代碼
這篇文章主要給大家介紹了關(guān)于Android項目實戰(zhàn)教程之高仿網(wǎng)易云音樂啟動頁的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09
Android實現(xiàn)字母導(dǎo)航控件的示例代碼
這篇文章主要介紹了通過自定義View實現(xiàn)字母導(dǎo)航控件的示例代碼,文中的實現(xiàn)過程講解詳細,對我們學習或工作有一定幫助,感興趣的可以學習一下2022-01-01

