java post上传进度,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 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值