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時我使用瞭單例模式,在保證線程安全的前提下節省資源,提升服務器訪問速率。覺得麻煩的可以不使用單例。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Android OKHttp使用簡介
- Android使用Retrofit上傳文件功能
- android實現okHttp的get和post請求的簡單封裝與使用
- 初學Android之網絡封裝實例
- 基於springboot的RestTemplate、okhttp和HttpClient對比分析