文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写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实现文件上传进度相关推荐

  1. java post上传进度,OkHttp实现文件上传进度

    文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写RequestBody,看代码 import com.squareup.okhttp.*; ...

  2. html如何显示上传进度条,HTML5 Ajax文件上传进度条如何显示

    这篇文章主要介绍了HTML5 Ajax文件上传进度条是如何显示的,基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活,对HTML5上传进度条感兴趣的小伙伴们可以参考一下 原本打 ...

  3. 大文件上传 进度条显示(仿CSDN资源上传效果) .

    浏览-选择文件-点击 "上传 "后,效果如下: 弹出透明UI遮罩层 并显示上传这个过程 我这里设置太透明了 效果不是很立体 文件结构如图: 说明:用到"高山来客" ...

  4. html资源文件记载进度条,HTML5矢量实现文件上传进度条

    在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...

  5. jquery和php上传文件进度条,jQuery实现文件上传进度条特效_jquery

    上传进度条通常是由前面jquery加后端了脚本器脚本来实现了,今天我们介绍的是一款基本php+jQuery实现文件上传进度条效果的例子,具体细节如下. 最近呢,一个项目做一个进度条的效果出来,这个之前 ...

  6. django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...

    django + jquery-file-upload 插件实现文件上传+进度条显示 1.model.py class Fujian(models.Model):name = models.CharF ...

  7. 大文件上传 进度条显示(仿CSDN资源上传效果)

    浏览-选择文件-点击 "上传 "后,效果如下: 弹出透明UI遮罩层 并显示上传这个过程 我这里设置太透明了 效果不是很立体 文件结构如图: 说明:用到"高山来客" ...

  8. HTML5矢量实现文件上传进度条

    在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...

  9. java fileupload 进度_SpringBoot+fileUpload获取文件上传进度

    我本人在网上找了很多关于文件上传进度获取的文章,普遍基于spring MVC 框架通过 fileUpload 实现,对于spring Boot 通过 fileUpload 实现的帖子非常少,由于小弟学 ...

最新文章

  1. 洛谷——P2626 斐波那契数列(升级版)矩阵
  2. PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...
  3. DCMTK:读取多个图像的示例应用程序
  4. 张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署
  5. python中二进制整数_Python程序查找表示二进制整数的必要位数
  6. java getid_Java TimeZone getID()方法与示例
  7. TabError: inconsistent use of tabs and spaces in indentation
  8. beetl模板入门例子
  9. 内存占用率火速暴降!Windows 11“效率模式”CPU性能提升4倍
  10. sony lt26i android 5.1rom,索尼 LT26 Xperia L 5.1.1 ROM刷机包 扁平化 来电归属 农历 新相机 稳定流畅...
  11. NYOJ--1100--WAJUEJI which home strong!
  12. 通过原生JS实现为元素添加事件的方法
  13. 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 485期】
  14. android 输入模糊匹配_Android 模糊搜索
  15. 电商系统之商品类目及商品属性史
  16. PLC调试这几步都不知道
  17. 使用Excel 2007绘制甘特图
  18. 修改select2未搜索到数据时的提示语
  19. 你工作经验欠缺,如何能胜任这项工作?
  20. WEB学习——JQury

热门文章

  1. intellij idea 1314 插件推荐及快速上手建议
  2. MYSQL查看执行计划 Explain
  3. 详解java类的生命周期
  4. 白话一下什么是决策树模型
  5. Python爬虫入门(3):Urllib库的基本使用
  6. Golang 一些基本功能使用记录
  7. 应用栈求解迷宫问题(C++实现)
  8. HashMap为什么是线程不安全的?
  9. ob_start ob_end_clean的用法 fetch
  10. spring 源代码地址