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实现文件上传进度相关推荐
- java post上传进度,OkHttp实现文件上传进度
文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写RequestBody,看代码 import com.squareup.okhttp.*; ...
- html如何显示上传进度条,HTML5 Ajax文件上传进度条如何显示
这篇文章主要介绍了HTML5 Ajax文件上传进度条是如何显示的,基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活,对HTML5上传进度条感兴趣的小伙伴们可以参考一下 原本打 ...
- 大文件上传 进度条显示(仿CSDN资源上传效果) .
浏览-选择文件-点击 "上传 "后,效果如下: 弹出透明UI遮罩层 并显示上传这个过程 我这里设置太透明了 效果不是很立体 文件结构如图: 说明:用到"高山来客" ...
- html资源文件记载进度条,HTML5矢量实现文件上传进度条
在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...
- jquery和php上传文件进度条,jQuery实现文件上传进度条特效_jquery
上传进度条通常是由前面jquery加后端了脚本器脚本来实现了,今天我们介绍的是一款基本php+jQuery实现文件上传进度条效果的例子,具体细节如下. 最近呢,一个项目做一个进度条的效果出来,这个之前 ...
- django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...
django + jquery-file-upload 插件实现文件上传+进度条显示 1.model.py class Fujian(models.Model):name = models.CharF ...
- 大文件上传 进度条显示(仿CSDN资源上传效果)
浏览-选择文件-点击 "上传 "后,效果如下: 弹出透明UI遮罩层 并显示上传这个过程 我这里设置太透明了 效果不是很立体 文件结构如图: 说明:用到"高山来客" ...
- HTML5矢量实现文件上传进度条
在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...
- java fileupload 进度_SpringBoot+fileUpload获取文件上传进度
我本人在网上找了很多关于文件上传进度获取的文章,普遍基于spring MVC 框架通过 fileUpload 实现,对于spring Boot 通过 fileUpload 实现的帖子非常少,由于小弟学 ...
最新文章
- 洛谷——P2626 斐波那契数列(升级版)矩阵
- PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...
- DCMTK:读取多个图像的示例应用程序
- 张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署
- python中二进制整数_Python程序查找表示二进制整数的必要位数
- java getid_Java TimeZone getID()方法与示例
- TabError: inconsistent use of tabs and spaces in indentation
- beetl模板入门例子
- 内存占用率火速暴降!Windows 11“效率模式”CPU性能提升4倍
- sony lt26i android 5.1rom,索尼 LT26 Xperia L 5.1.1 ROM刷机包 扁平化 来电归属 农历 新相机 稳定流畅...
- NYOJ--1100--WAJUEJI which home strong!
- 通过原生JS实现为元素添加事件的方法
- 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 485期】
- android 输入模糊匹配_Android 模糊搜索
- 电商系统之商品类目及商品属性史
- PLC调试这几步都不知道
- 使用Excel 2007绘制甘特图
- 修改select2未搜索到数据时的提示语
- 你工作经验欠缺,如何能胜任这项工作?
- WEB学习——JQury