日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OkHttp实现文件上传进度

發布時間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OkHttp实现文件上传进度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件上傳就一個沒刻度的進度條在那里轉怎么行,本篇帶你實現上傳進度,為你的進度條添加刻度吧,啥都不說了,重點重寫RequestBody,看代碼

import com.squareup.okhttp.*; import okio.Buffer; import okio.BufferedSink; import okio.Okio; import okio.Source;import java.io.File; import java.io.IOException;public class ProgressUploadFile {private static final OkHttpClient okHttpClient = new OkHttpClient();private void run() {MultipartBuilder builder = new MultipartBuilder().type(MultipartBuilder.FORM);File file = new File("D:\\file.jpg");builder.addFormDataPart("file", file.getName(), createCustomRequestBody(MultipartBuilder.FORM, file, new ProgressListener() {@Override public void onProgress(long totalBytes, long remainingBytes, boolean done) {System.out.print((totalBytes - remainingBytes) * 100 / totalBytes + "%");}}));RequestBody requestBody = builder.build();Request request = new Request.Builder().url("http://localhost:8080/upload") //地址 .post(requestBody).build();okHttpClient.newCall(request).enqueue(new Callback() {@Override public void onFailure(Request request, IOException e) {}@Override public void onResponse(Response response) throws IOException {System.out.println("response.body().string() = " + response.body().string());}});}public static RequestBody createCustomRequestBody(final MediaType contentType, final File file, final ProgressListener listener) {return new RequestBody() {@Override public MediaType contentType() {return contentType;}@Override public long contentLength() {return file.length();}@Override public void writeTo(BufferedSink sink) throws IOException {Source source;try {source = Okio.source(file);//sink.writeAll(source);Buffer buf = new Buffer();Long remaining = contentLength();for (long readCount; (readCount = source.read(buf, 2048)) != -1; ) {sink.write(buf, readCount);listener.onProgress(contentLength(), remaining -= readCount, remaining == 0);}} catch (Exception e) {e.printStackTrace();}}};}interface ProgressListener {void onProgress(long totalBytes, long remainingBytes, boolean done);}public static void main(String[] args) {new ProgressUploadFile().run();}}

結果:?
0%0%1%1%1%2%2%3%3%3%4%4%4%5%5%6%6%6%7%7%7%8%8%9%9%9%10%10%10%11%11%12%12%12%13%13%13%14%14%15%15%15%16%16%16%17%17%18%18%18%19%19%19%20%20%21%21%21%22%22%23%23%23%24%24%24%25%25%26%26%26%27%27%27%28%28%29%29%29%30%30%30%31%31%32%32%32%33%33%33%34%34%35%35%35%36%36%36%37%37%38%38%38%39%39%39%40%40%41%41%41%42%42%43%43%43%44%44%44%45%45%46%46%46%47%47%47%48%48%49%49%49%50%50%50%51%51%52%52%52%53%53%53%54%54%55%55%55%56%56%56%57%57%58%58%58%59%59%59%60%60%61%61%61%62%62%62%63%63%64%64%64%65%65%66%66%66%67%67%67%68%68%69%69%69%70%70%70%71%71%72%72%72%73%73%73%74%74%75%75%75%76%76%76%77%77%78%78%78%79%79%79%80%80%81%81%81%82%82%82%83%83%84%84%84%85%85%86%86%86%87%87%87%88%88%89%89%89%90%90%90%91%91%92%92%92%93%93%93%94%94%95%95%95%96%96%96%97%97%98%98%98%99%99%99%100%

response.body().string() = You successfully uploaded file.jpg !?
Process finished with exit code 0

總結

以上是生活随笔為你收集整理的OkHttp实现文件上传进度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。