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自定義ViewGroup之FlowLayout(三)
這篇文章主要為大家詳細介紹了Android自定義ViewGroup之FlowLayout,常用于關(guān)鍵字標簽,搜索熱詞列表等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
詳解Android App中的AsyncTask異步任務(wù)執(zhí)行方式
這篇文章主要介紹了Android App中的AsyncTask異步任務(wù)執(zhí)行方式,文中舉了一個打開網(wǎng)絡(luò)圖片的例子幫助大家直觀理解,需要的朋友可以參考下2016-04-04
Android實現(xiàn)頁面跳轉(zhuǎn)的全過程記錄
對于android軟件開發(fā)初級學習者來說,簡單的頁面跳轉(zhuǎn)是必學的,這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-10-10
基于android示例程序(bitmapfun) 高效加載圖片讓人無語地方
嘗試了使用git上的一個開源項目afinal(bitmapfun的封裝版)來加載圖片,但是在測試的時候發(fā)現(xiàn)了一個問題,新的圖片加載器(bitmapfun)比之前用的ImageDownloader要慢很多,特別是在網(wǎng)絡(luò)狀況不好的時候,那簡直是太讓人無語了2013-04-04

