文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写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 classProgressUploadFile {private static final OkHttpClient okHttpClient = newOkHttpClient();private voidrun() {

MultipartBuilder builder= newMultipartBuilder().type(MultipartBuilder.FORM);

File file= new File("D:\\file.jpg");

builder.addFormDataPart("file", file.getName(), createCustomRequestBody(MultipartBuilder.FORM, file, newProgressListener() {

@Overridepublic void onProgress(long totalBytes, longremainingBytes, boolean done) {

System.out.print((totalBytes - remainingBytes) * 100 / totalBytes + "%");

}

}));

RequestBody requestBody=builder.build();

Request request= newRequest.Builder()

.url("http://localhost:8080/upload") //地址

.post(requestBody)

.build();

okHttpClient.newCall(request).enqueue(newCallback() {

@Overridepublic voidonFailure(Request request, IOException e) {

}

@Overridepublic voidonResponse(Response response) throws IOException {

System.out.println("response.body().string() =" + response.body().string());

}

});

}public staticRequestBody createCustomRequestBody(final MediaType contentType, final File file, final ProgressListener listener) {return newRequestBody() {

@OverridepublicMediaType contentType() {returncontentType;

}

@Overridepublic longcontentLength() {returnfile.length();

}

@Overridepublic voidwriteTo(BufferedSink sink) throws IOException {

Source source;try{

source=Okio.source(file);//sink.writeAll(source);

Buffer buf = newBuffer();

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();

}

}

};

}interfaceProgressListener {void onProgress(long totalBytes, longremainingBytes, boolean done);

}public static voidmain(String[] args) {newProgressUploadFile().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

java post上传进度,OkHttp实现文件上传进度相关推荐

  1. java web 上传图片漏洞_Web安全:文件上传漏洞

    原标题:Web安全:文件上传漏洞 一般将文件上传归类为直接文件上传与间接文件上传.直接文件上传就是服务器根本没有做任何安全过滤,导致攻击者可以直接上传小马文件及大马文件(如ASP.ASPX.PHP.J ...

  2. 基于Java实现企业微信群聊机器人-文件上传+消息推送(保证可用)

    基于Java实现企业微信群聊机器人-文件上传+消息推送 1.pom.xml(注意版本尽量保持一致) 2.文件工具类 3.企业微信请求类 4.企业微信响应类 5.发送方法 6.企业微信机器人创建和配置 ...

  3. 文件上传linux服务器,Linux 文件上传Linux服务器

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  4. SSM框架使用Layui文件上传插件实现多文件上传(多文件列表)

    SSM框架使用Layui文件上传插件实现多文件上传(多文件列表) pom.xml文件的配置 想要实现SSM框架实现多文件上传,必要的jar包必须要在pom.xml文件中引入.如下: <!--co ...

  5. php 文件上传mime 类型,php文件上传类型(MIME)对照表

    网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特色),学php的人都知道文件上传怎么做,但很多人在编程中却 ...

  6. 00截断上传绕过_【文件上传与解析】文件上传与解析漏洞总结v1.0

    点击上方"公众号" 可以订阅哦! Hello,各位小伙伴晚上好~ 这里是依旧勤劳写公众号的小编~ 今天本公众号将推出一个新的模块,那就是漏洞知识点总结模块!!!(此处应有掌声~) ...

  7. asp.net实现ftp上传代码(解决大文件上传问题)

    asp.net实现ftp上传代码(解决大文件上传问题) 参考文章: (1)asp.net实现ftp上传代码(解决大文件上传问题) (2)https://www.cnblogs.com/LYunF/ar ...

  8. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例

    搜索热词 @H_404_0@本文实例讲述了PHP单文件上传原理及上传函数的封装操作.分享给大家供大家参考,具体如下: @H_404_0@表单: @H_404_0@0.PHP: 无标题文档 请选择您要上 ...

  9. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    SharePoint 2010 --自定义上传页面与多文件上传解决方案 参考文章: (1)SharePoint 2010 --自定义上传页面与多文件上传解决方案 (2)https://www.cnbl ...

最新文章

  1. spring boot 完整集成jsp。(亲测可用)
  2. [Swift]LeetCode326. 3的幂 | Power of Three
  3. 解决win2003安装exchangeServer后关机慢的方法
  4. rabbitmq使用_Spring Boot中使用RabbitMQ
  5. html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!
  6. 贴吧备份到本地浏览html,获取贴吧对应页html及写入文件
  7. 电能储存系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. UcOS-II 和linux比较
  9. 计算机课程屏幕录制,电脑录屏怎么录?游戏课程会议都能录制的实用方法
  10. 安装kafka+golang操作kafka
  11. 软件评测师--第11小时 安全测试和评估
  12. android 8.0+后台Service限制
  13. hdu 5312 Sequence(数学推导——三角形数)
  14. moment 秒级时间戳转格式
  15. 熊孩子太调皮,送他Airblock无人机变身小神童
  16. 使用Java写出九九乘法口诀表
  17. CityMaker学习教程10 示例代码的使用Javascript
  18. github使用ssh方式
  19. 深度优先搜索及python实现围棋“吃子”
  20. bolt数据库简单使用教程

热门文章

  1. 基于SaltStack完成LVS的配置管理
  2. PDF打印机常见问题汇总
  3. xp的guest访问
  4. 常见的算法题目分类图
  5. 《编程之美》1.3一摞烙饼的排序
  6. Leetcode 34.排序数组中的第一个元素和最后一个元素
  7. 【Leetcode 795】Number of Subarrays with Bounded Maximum
  8. matplotlib fontdict 字体设置
  9. tensorflow: 图像处理模块 tf.image
  10. 类的加载过程(来一个通俗易懂的理解)