android 文件上传 进度框



http://my.eoe.cn/808632/archive/15284.html

// 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。
      httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K


http://blog.csdn.net/yinkai1205/article/details/7731705

已知文件大小:

 conn.setFixedLengthStreamingMode((int) (before.length + simpleUploadTask.fileSize + after.length));//主要是这句,用来禁掉缓存,不过需要将上传数据的大小传进去 


http://blog.csdn.net/x1617044578/article/details/8668632


http://blog.csdn.net/xhl101711/article/details/7850949

此篇会导致进度显示不正常.



http://my.eoe.cn/558276/archive/5848.html

别人的类似此篇的汇总链接页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中进行文件上传并显示上传进度的一种常见方式是使用 OkHttp 库。具体实现步骤如下: 1. 添加 OkHttp 库依赖:在 app 的 build.gradle 文件中添加以下代码: ```gradle dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' } ``` 2. 创建一个 RequestBody 对象,该对象包含将要上传的文件内容。 ```java File file = new File(filePath); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); ``` 3. 创建一个 ProgressRequestBody 对象,该对象可以监听请求的上传进度。 ```java ProgressRequestBody progressRequestBody = new ProgressRequestBody(requestBody, new ProgressRequestBody.Listener() { @Override public void onProgressChanged(long numBytes, long totalBytes, float percent) { // 在这里更新上传进度 } }); ``` 4. 创建一个 MultipartBody.Part 对象,该对象将上传的文件内容包装成一个“Part”。 ```java MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody); ``` 5. 创建一个 Request 对象,该对象包含上传文件的 URL 和其他参数。 ```java Request request = new Request.Builder() .url(uploadUrl) .post(part) .build(); ``` 6. 使用 OkHttp 发送请求,并在 onResponse 回调中处理上传结果。 ```java OkHttpClient client = new OkHttpClient(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 上传失败 } @Override public void onResponse(Call call, Response response) throws IOException { // 上传成功 } }); ``` 在上面的代码中,我们自定义了一个 ProgressRequestBody 类来监听上传进度。该类的实现如下: ```java public class ProgressRequestBody extends RequestBody { private final RequestBody requestBody; private final Listener listener; public ProgressRequestBody(RequestBody requestBody, Listener listener) { this.requestBody = requestBody; this.listener = listener; } @Override public MediaType contentType() { return requestBody.contentType(); } @Override public long contentLength() throws IOException { return requestBody.contentLength(); } @Override public void writeTo(BufferedSink sink) throws IOException { BufferedSink bufferedSink = Okio.buffer(new ForwardingSink(sink)); requestBody.writeTo(bufferedSink); bufferedSink.flush(); } public interface Listener { void onProgressChanged(long numBytes, long totalBytes, float percent); } private class ForwardingSink extends ForwardingSink { private long numBytesWritten = 0L; private long totalBytes = 0L; public ForwardingSink(Sink delegate) { super(delegate); try { totalBytes = contentLength(); } catch (IOException e) { e.printStackTrace(); } } @Override public void write(Buffer source, long byteCount) throws IOException { super.write(source, byteCount); numBytesWritten += byteCount; listener.onProgressChanged(numBytesWritten, totalBytes, numBytesWritten / (float) totalBytes); } } } ``` 在 ForwardingSink 类中,我们通过调用 listener.onProgressChanged() 方法来通知上传进度的变化。通过在 onProgressChanged() 方法中更新 UI 来显示上传进度即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值