pj7777OkHttp实现文件上传进度

日期:2019-11-03编辑作者:建筑建材

4月25日,福建水泥发布2019年第一季度报告。

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

    }

}

报告期内,公司营业收入5.77亿元,同比增加14.79%,归属于上市公司股东的净利润 7205.95万元,同比减少16.67%。 pj7777 1

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

本文由pj7777发布于建筑建材,转载请注明出处:pj7777OkHttp实现文件上传进度

关键词:

我国研发全球首款节能玻璃现场检测仪

pj7777,北京奥博泰科技有限公司的便携式节能玻璃现场综合测试系统——慧眼1000,成功入驻秦皇岛国家玻璃质量监督...

详细>>

【pj7777】“一带一路”下的华新水泥使塔吉克斯

2013年9月 哈萨克斯坦 千百年来,在这条古老的丝绸之路上,各国人民共同谱写出千古传诵的友好篇章。两千多年的交...

详细>>

pj7777:昆钢控股与中铁物贸在钢材、水泥集中采

4月26日下午,昆钢控股与中铁物贸签订战略合作协议,根据协议,双方将发挥各自优势,在钢材、水泥集中采购等方...

详细>>

云南玉溪市华宁玉珠水泥日产5000吨生产线加紧建

日前,记者走进华宁玉珠水泥有限公司厂房内,看到挖掘机正在拆除淘汰落后的一线生产设备,工人们忙着打桩建设...

详细>>