亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android基于OkHttp實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2022年07月27日 08:44:01   作者:凌風(fēng).983  
這篇文章主要為大家詳細(xì)介紹了Android基于OkHttp實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android基于OkHttp實(shí)現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下

一、相關(guān)概述

  • Android請(qǐng)求訪問(wèn)服務(wù)端大多數(shù)情況下依舊是使用http協(xié)議,故而可以參照web端的數(shù)據(jù)傳輸形式來(lái)實(shí)現(xiàn)。
  • multipart/form-data是瀏覽器提交表單上傳文件的一種方式。
  • 有關(guān)于http的get,post請(qǐng)求大家可以自行百度了解。
  • OkHttp是一款優(yōu)秀的HTTP框架,它支持get請(qǐng)求和post請(qǐng)求,支持基于Http的文件上傳和下載,支持加載圖片,支持下載文件透明的GZIP壓縮,支持響應(yīng)緩存避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求,支持使用連接池來(lái)降低響應(yīng)延遲問(wèn)題。

二、簡(jiǎn)單使用

1:添加依賴

implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okio:okio:1.12.0'

2:編寫(xiě)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)部類的方式實(shí)現(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)建線程實(shí)現(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();
? ? }

三、注意事項(xiàng)

在文件上傳時(shí)我用的是利用Intent獲取所選文件的Uri,使用了大佬的RealPathFromUriUtils工具類,get到文件的path,然后實(shí)例化了File作為參數(shù)使用upload方法。

在定義UploadUtil時(shí)我使用了單例模式,在保證線程安全的前提下節(jié)省資源,提升服務(wù)器訪問(wèn)速率。覺(jué)得麻煩的可以不使用單例。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論