當前位置:首頁 » 文件管理 » okhttp上傳斷點

okhttp上傳斷點

發布時間: 2022-08-16 10:47:25

⑴ okhttp3使用詳解get怎麼傳參數

kHttp 可以做很多事,包括上傳字元串、上傳文件、上傳流、上傳表格參數、上傳多部分的請求、響應 Json、響應緩存等。目前主要流行 Json 數據通信,所以我們就來講講基於 Json 通信的 GET 和 POST 請求與響應。
2 下載 OkHttp
介紹了這么多理論知識,接下來就進入實戰階段了,首先下載 OkHttp 的 jar 包,可以去 GitHub 下載最近的包。
這是最新下載地址:https://search.maven.org/remote_content?g=com.squareup.okhttp3&a=okhttp&v=LATEST
當然,你也可以在項目中直接添加編譯(用於 Android Studio):compile 'com.squareup.okhttp3:okhttp:3.2.0'
OkHttp 的項目地址:https://github.com/square/okhttp
除此之外,還需要添加一個 OkHttp 的依賴包:okio.jar,下載地址:https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST
項目地址:https://github.com/square/okio
編譯地址:compile 'com.squareup.okio:okio:1.6.0'
3 GET 請求
我們從最簡單的 Http 請求開始學起,首先需要獲取一個 OkHttpClient 對象,方法如下:

[java] view plain print?

⑵ android里使用httpurlconnection為什麼會有okhttp的列印

android使用HttpUrlConnection獲取網路數據的時候,肯定會報出異常的,因為手機網路連接不穩定,偶爾會斷開,需要使用try catch來處理異常。

⑶ okhttp 怎麼管理 cookie

OkHttp和HttpURLConnection一樣, 是面向java的, 而且是做socket層的事情的, 使用時要在子線程調用, 通過handler發送結果到主線程. 而NoHttp和Volley不是做socket層的東西. 直接在主線程就可以調用, 拿到結果後直接更新UI, 不需要用handler去發送, 很簡單.
不過我推薦使用NoHttp. 原因是NoHttp封裝了: 文件下載, 斷點續傳, 304緩存, 302/303傳參數, 傳文件, 請求頭, 多文件上傳, 大文件上傳, Cookie自動管理等多種功能, 這些是Volley而沒有, 使用Volley時這些功能要我們去寫蠻多代碼來再次封裝.

而且Volley用的HttpClient來解析的, Android6.0刪除了HttpClient後, 我們在6.0下也不能使用Volley的源碼了, 所以還是用NoHttp吧, NoHttp兼容2.0-6.0以上

而使用OkHttp還需要我們自己去封裝, 而且Android4.4之後NoHttp也是使用OkHttp做底層的.

⑷ okhttp 上傳文件socket關閉怎麼解決

使用okhttp上傳文件時,每次上傳超過5M的文件就會失敗, java.net.SocketException: sendto failed: EPIPE (Broken pipe)

原因是okhttp的請求頭RequestBody出現了問題

原代碼:

RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(null, file))
.addFormDataPart("filekey", fileKey)
.addFormDataPart("isSend", "true")
.addPart(Headers.of("Content-Disposition", "form-data; name=\"another\";filename=" + file.getName() + "")

,RequestBody.create(MediaType.parse("application/octet-stream"), file))
.build();

改正後的代碼,刪除了addPart
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(null, file))
.addFormDataPart("filekey", fileKey)
.addFormDataPart("isSend", "true")
.build();

⑸ Android 使用OkhttpUtils上傳圖片

IMAGE_FILE_NAME這個確定是文件路徑么?
那個其他我看不出來,我上傳圖片用的都是Xutils,你可以搜搜試試。

⑹ okhttp最大支持上傳多大的文件

/**
* 上傳文件
* @param actionUrl 連接地址
* @param paramsMap 參數
* @param callback 回調
* @param <T>
*/
public static <T>void upLoadFile(String actionUrl, HashMap<String, Object> paramsMap, Callback callback) {

// RequestBody requestBody = new MultipartBuilder() //建立請求的內容
// .type(MultipartBuilder.FORM)//表單形式
// .addFormDataPart("token", token)//攜帶的參數
// .addFormDataPart("file", file.getName(), RequestBody.create(null, file))//第一個參數是伺服器接收的名稱,第二個是上傳文件的名字,第三個是上傳的文件
// .build();
// Request request = new Request.Builder()//建立請求
// .url(url)//請求的地址
// .post(requestBody)//請求的內容(上面建立的requestBody)
// .build();

try {
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBuilder builder = new MultipartBuilder();
builder.type(MultipartBuilder.FORM);
//追加參數
for (String key : paramsMap.keySet()) {
Object object = paramsMap.get(key);
if (!(object instanceof File)) {
builder.addFormDataPart(key, object.toString());
} else {
File file = (File) object;
builder.addFormDataPart(key, file.getName(), RequestBody.create(null, file));
}
}
//創建RequestBody
RequestBody body = builder.build();
//創建Request
final Request request = new Request.Builder().url(actionUrl).post(body).build();
HLog.v("upLoadFile","upLoadFile",request.urlString());
Call call=okHttpClient.newCall(request);
call.enqueue(callback);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}

⑺ 如何實現基於http協議的斷點續傳的上傳功能

於HTTP 協議的多線程下載和斷點續傳的實現 學 生:葉升路 指導教師:覃 穎 (三峽大學 電氣信息學院) 摘 要:本文介紹了網路下載軟體中的最新技術——多線程下載和斷點續傳技術,同時 也介紹了HTTP 協議的發展、特點以及WinSock 編程技術。最後在這些技術的基礎上成 功設計並實現了基於HTTP 協議的具有多線程下載和斷點續傳功能的下載軟體。本軟體 的實現代碼未使用任何WinInet API 函數如InternetOpen , InternetConnect 等,而是直接 使用WinSock 編程,逐步解析HTTP 協議來完成會話和文件下載等功能。經測試,下載 速度有所提高。 關鍵詞:下載;多線程;斷點續傳;HTTP;WinSock; Abstract:This paper introces the latest downloading technology called multi-threaded downloading and resume in network downloading software. But also descripes the development of HTTP protocol, characteristics and WinSock programming. Finally, based on these technologies successfully designed and implemented a downloading tool based on the HTTP protocol with multi-threaded and resume features. The realization of the software code does not use any WinInet API functions such as InternetOpen, InternetConnect, etc., but directly use WinSock to programming, and complete the functions of conversation and file downloads and others by parse HTTP protocol steply. After tested, the speed of downloading has increased. Keywords: Downloading;Multi-thread;Resume;HTTP;WinSock; 前言 最近幾年,隨著計算機網路的飛速發展,網際網路(Internet)已經逐漸成為人們生活、 工作、學習必不可缺的一部分。網際網路上存儲了大量豐富的信息資源,我們可以使用下載 工具,把需要的信息資源下載到本地。但是由於受到各種因素的限制,例如伺服器性能、 網路帶寬、下載的信息量以及下載工具等等,下載速度受到不同程度的影響。因此人們不 斷地提高伺服器性能,擴展網路帶寬,開發效率更高的下載工具以達到最大化提高下載 速度的目的。 在限制下載速度的眾多因素中,研究新的網路下載技術開發出更高效的下載工具無 疑是其中最節約,環保以及方便的方式。網路下載技術,也可以稱為網路文件共享技術, 10 1 它一直是網路發展的重要推動力之一。早期人們共享資源的普遍方法是將資源文件上傳 至伺服器上,然後其他用戶可以通過HTTP 或ftp 等協議將其下載到本地電腦。這種模 式稱為客戶機/伺服器模式即C/S 模式,它對伺服器的依賴性很大,當下載用戶很少時, 比如說一個,他將獨享伺服器的帶寬,很顯然其下載速度會非常快。然而當下載的人數 較多而伺服器帶寬有限時,比如伺服器帶寬為3MB/S,而下載人數為100 人,則眾多下 載用戶不得不共享一個帶寬(3MB/S)最終結果是下載速度均分(30KB/S),普遍不高。 P2P 技術的出現使得人們終於擺脫了伺服器的枷鎖。它的主要特點是資源分散、負 載均衡、和非中心化,它將共享的文件存儲在各個客戶機節點上,用戶之間可以直接共 享和傳輸文件而不需要通過伺服器。客戶機不再只利用伺服器帶寬進行下載,它同時也 可以利用其他客戶機節點的帶寬,這樣大大提高了下載速度。 縱觀網路下載技術發展的歷史,可以將其劃分為四個階段:單線程下載階段、多線 程下載及斷點續傳階段、P2P階段、P2SP階段。 一、單線下載時代:應對有限時間流量的辦法 早在上個世紀90年代,當時互聯網並不普及,很多人使用Modem撥號,通過Telnet 軟體連接到撥接式BBS上獲取資訊並與別人交流(收發郵件等),由於伺服器的電話線 路數量有限,因此都會限制連接時間,一般新注冊用戶只有10分鍾左右。這點時間用來 看帖回帖顯然不夠的,因此有人就開發了軟體,進入BBS後,能夠將整個BBS上所有內 容都下載回來,然後可以斷線慢慢看慢慢回,最後再次撥入BBS上傳回復。 二、斷點續傳與多線程下載時代:大幅度提高速度 進入Windows與WWW(World Wide Web,互聯網)時代之後,IE,Netscape等瀏覽 器都可以通過點擊左鍵下載,那個時候網路速度最快不過5KB/s,下載一首5MB的MP3 歌曲要15分鍾以上!中途萬一斷線就前功盡棄,於是有人開發了支持斷點續傳的下載軟 件。 世界上第一款支持斷點續傳的下載軟體應該是GetRight。它可讓你用瀏覽器下載文 件時有續傳功能,可設定時間來下載文件或是中斷Modem撥接,下載完畢時自動中斷 Modem撥接或關機。 為了更好的利用帶寬,在斷點續傳的基礎上,多線程下載軟體逐漸發展了起來。最 早出現的多線程下載軟體是中國人開發的NetAnts(網路螞蟻)。網路螞蟻其實也是一 個斷點續傳軟體,但它對斷點續傳功能進行了擴展:可進行多點續傳,即利用斷點續傳 的原理同時建立多個連接下載同一個軟體並最終將其合並為一個完整的軟體。

⑻ android 上傳圖片報此異常java.io.EOFException 求大神指點

這個我在部署到tomcat的時候遇到過這個情況,不知道和你的是否一樣,我的處理方法
apache-tomcat-6.0.37\work\Catalina\localhost,把你的項目刪除,重新跑一遍,tomcat中的錯誤是因為有一個文件在啟動的時候會短暫的出現,然後被刪除,如果沒有刪除就會報eofe 的異常

⑼ 現如今,Android開發有成熟的框架嗎

1volley

項目地址 https://github.com/smanikandan14/Volley-demo
(1) JSON,圖像等的非同步下載;
(2) 網路請求的排序(scheling)
(3) 網路請求的優先順序處理
(4) 緩存
(5) 多級別取消請求
(6) 和Activity和生命周期的聯動(Activity結束時同時取消所有網路請求)

2 android學習手冊。例子、源碼、文檔全部搞定,採用androidstudo的目錄結構,360手機助手中下載。下面是截圖。

3、android-async-http

項目地址:https://github.com/loopj/android-async-http
文檔介紹:http://loopj.com/android-async-http/
(1) 在匿名回調中處理請求結果
(2) 在UI線程外進行http請求
(3) 文件斷點上傳
(4) 智能重試
(5) 默認gzip壓縮
(6) 支持解析成Json格式
(7) 可將Cookies持久化到SharedPreferences
4、Afinal框架

項目地址:https://github.com/yangfuhai/afinal
主要有四大模塊:
(1) 資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI綁定和事件綁定。無需findViewById和setClickListener等。
(3) 網路模塊:通過httpclient進行封裝http數據請求,支持ajax方式載入,支持下載、上傳文件功能。
(4) 圖片緩存模塊:通過FinalBitmap,imageview載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
FinalBitmap可以配置線程載入線程數量,緩存大小,緩存路徑,載入顯示動畫等。FinalBitmap的內存管理使用lru演算法
沒有使用弱引用(android2.3以後google已經不建議使用弱引用,android2.3後強行回收軟引用和弱引用,詳情查看android官方文檔),
更好的管理bitmap內存。FinalBitmap可以自定義下載器,用來擴展其他協議顯示網路圖片,比如ftp等。同時可以自定義bitmap顯示器,
在imageview顯示圖片的時候播放動畫等(默認是漸變動畫顯示)。
5、xUtils框架

項目地址:https://github.com/wyouflf/xUtils
主要有四大模塊:
(1) 資料庫模塊:android中的orm框架,一行代碼就可以進行增刪改查;
支持事務,默認關閉;
可通過註解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請註解表名和列名);
支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;
自動載入外鍵關聯實體,支持延時載入;
支持鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆後仍可正常工作;
目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
(3) 網路模塊:支持同步,非同步方式的請求;
支持大文件上傳,上傳大文件不會oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
下載支持301/302重定向,支持設置是否根據Content-Disposition重命名下載的文件;
返迴文本內容的請求(默認只啟用了GET請求)支持緩存,可設置默認過期時間和針對當前請求的過期時間。
(4) 圖片緩存模塊:載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支持載入網路圖片和本地圖片;
內存管理使用lru演算法,更好的管理bitmap內存;
可配置線程載入線程數量,緩存大小,緩存路徑,載入顯示動畫等...
6、ThinkAndroid

項目地址:https://github.com/white-cat/ThinkAndroid
主要有以下模塊:
(1) MVC模塊:實現視圖與模型的分離。
(2) ioc模塊:android中的ioc模塊,完全註解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
(3) 資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
(4) http模塊:通過httpclient進行封裝http數據請求,支持非同步及同步方式載入。
(5) 緩存模塊:通過簡單的配置及設計可以很好的實現緩存,對緩存可以隨意的配置
(6) 圖片緩存模塊:imageview載入圖片的時候無需考慮圖片載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
(7) 配置器模塊:可以對簡易的實現配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。
(8) 日誌列印模塊:可以較快的輕易的是實現日誌列印,支持日誌列印的擴展,目前支持對sdcard寫入本地列印、以及控制台列印
(9) 下載器模塊:可以簡單的實現多線程下載、後台下載、斷點續傳、對下載進行控制、如開始、暫停、刪除等等。
(10) 網路狀態檢測模塊:當網路狀態改變時,對其進行檢
7、LoonAndroid

項目地址:https://github.com/gdpancheng/LoonAndroid
主要有以下模塊:
(1) 自動注入框架(只需要繼承框架內的application既可)
(2) 圖片載入框架(多重緩存,自動回收,最大限度保證內存的安全性)
(3) 網路請求模塊(繼承了基本上現在所有的http請求)
(4) eventbus(集成一個開源的框架)
(5) 驗證框架(集成開源框架)
(6) json解析(支持解析成集合或者對象)
(7) 資料庫(不知道是哪位寫的 忘記了)
(8) 多線程斷點下載(自動判斷是否支持多線程,判斷是否是重定向)
(9) 自動更新模塊
(10) 一系列工具類

⑽ okhttp請求網路怎麼設置請求超時

OkHttp 處理了很多網路疑難雜症:會從很多常用的連接問題中自動恢復。如果您的伺服器配置了多個IP地址,當第一個IP連接失敗的時候,OkHttp會自動嘗試下一個IP。OkHttp還處理了代理伺服器問題和SSL握手失敗問題。

OkHttp是一個相對成熟的解決方案,據說Android4.4的源碼中可以看到HttpURLConnection已經替換成OkHttp實現了。所以我們更有理由相信OkHttp的強大。

1、HTTP請求方法
同步GET請求
private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
Request request = new Request.Builder()
.url("http://publicobject.com/helloworld.txt")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
Headers responseHeaders = response.headers();
for (int i = 0; i < responseHeaders.size(); i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}
System.out.println(response.body().string());
}

Response類的string()方法會把文檔的所有內容載入到內存,適用於小文檔,對應大於1M的文檔,應 使用流()的方式獲取。
response.body().byteStream()

非同步GET請求
private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
Request request = new Request.Builder()
.url("http://publicobject.com/helloworld.txt")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
e.printStackTrace();
}

@Override
public void onResponse(Response response) throws IOException {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
Headers responseHeaders = response.headers();
for (int i = 0; i < responseHeaders.size(); i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}

System.out.println(response.body().string());
}
});
}

讀取響應會阻塞當前線程,所以發起請求是在主線程,回調的內容在非主線程中。

POST方式提交字元串
private static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
String postBody = ""
+ "Releases\n"
+ "--------\n"
+ "\n"
+ " * _1.0_ May 6, 2013\n"
+ " * _1.1_ June 15, 2013\n"
+ " * _1.2_ August 11, 2013\n";

Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);

System.out.println(response.body().string());
}

因為整個請求體都在內存中,應避免提交1M以上的文件。

POST方式提交流
private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
RequestBody requestBody = new RequestBody() {
@Override
public MediaType contentType() {
return MEDIA_TYPE_MARKDOWN;
}

@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeUtf8("Numbers\n");
sink.writeUtf8("-------\n");
for (int i = 2; i <= 997; i++) {
sink.writeUtf8(String.format(" * %s = %s\n", i, factor(i)));
}
}

private String factor(int n) {
for (int i = 2; i < n; i++) {
int x = n / i;
if (x * i == n) return factor(x) + " × " + i;
}
return Integer.toString(n);
}
};

Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(requestBody)
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);

System.out.println(response.body().string());
}

使用Okio框架以流的形式將內容寫入,這種方式不會出現內存溢出問題。
POST方式提交文件
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
File file = new File("README.md");

Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);

System.out.println(response.body().string());
}

POST方式提交表單
private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
RequestBody formBody = new FormEncodingBuilder()
.add("search", "Jurassic Park")
.build();
Request request = new Request.Builder()
.url("https://en.wikipedia.org/w/index.php")
.post(formBody)
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);

System.out.println(response.body().string());
}

表單的每個Names-Values都進行了URL編碼。如果伺服器端介面未進行URL編碼,可定製個 FormBuilder。
文件上傳(兼容html文件上傳)
private static final String IMGUR_CLIENT_ID = "...";
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
// Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"title\""),
RequestBody.create(null, "Square Logo"))
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"image\""),
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();

Request request = new Request.Builder()
.header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
.url("https://api.imgur.com/3/image")
.post(requestBody)
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}

熱點內容
php開發的網頁 發布:2025-05-14 16:22:03 瀏覽:477
伺服器內存跑滿了怎麼回事 發布:2025-05-14 16:21:16 瀏覽:223
微信qq音樂緩存 發布:2025-05-14 16:16:16 瀏覽:468
c語言回收內存 發布:2025-05-14 16:16:08 瀏覽:143
2021國產安卓頂級旗艦買哪個 發布:2025-05-14 16:15:36 瀏覽:300
linux自學視頻 發布:2025-05-14 16:14:49 瀏覽:255
我的世界伺服器崩了重啟 發布:2025-05-14 16:09:37 瀏覽:44
android深拷貝 發布:2025-05-14 16:09:35 瀏覽:153
cf電腦版轉伺服器神器還在嗎 發布:2025-05-14 16:09:02 瀏覽:211
百度文庫伺服器如何搭建 發布:2025-05-14 16:09:00 瀏覽:248