91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android基于OkHttp如何實現文件上傳功能

發布時間:2022-07-27 11:47:16 來源:億速云 閱讀:264 作者:iii 欄目:開發技術

這篇“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時我使用了單例模式,在保證線程安全的前提下節省資源,提升服務器訪問速率。覺得麻煩的可以不使用單例。

以上就是關于“Android基于OkHttp如何實現文件上傳功能”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌黎县| 辉南县| 庆云县| 梓潼县| 达拉特旗| 察哈| 商南县| 乌鲁木齐市| 惠安县| 正安县| 高陵县| 门源| 墨江| 唐山市| 黔东| 德钦县| 汨罗市| 兴山县| 青冈县| 涿鹿县| 兴安县| SHOW| 乐昌市| 朝阳县| 尉犁县| 龙游县| 奎屯市| 集安市| 潮安县| 浦北县| 壶关县| 丹东市| 新巴尔虎左旗| 泽普县| 鸡泽县| 梨树县| 盱眙县| 商水县| 永安市| 徐州市| 新余市|