Http文件分块上传

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aiwusheng/article/details/64437714

注:
这里只是讨论一种文件分块上传的方案(解决方案并不唯一)

##1、需要服务端支持

如何通知服务端,客户端对于上传文件分了几片?
如何通知服务端,当前为上传文件的第几片?

可将以下数据放到post请求的body中解决以上问题:

{
    "file_md5": "xxxx",  	//完整文件的md5
    "total_count": 5,  		//总的分片数
    "current_index": 3,  	//当前分片位置,从1开始
    "file":  file  			//分片文件,表单方式提交
}

##2、客户端的代码

// long seekStart 文件上传的开始位置 
// long seekEnd   文件上传的结束位置

//-----skip到指定位置-----
long nowSeek = seekStart;
FileInputStream in = new FileInputStream(file);
if (seekStart > 0) {
    long amt = in.skip(seekStart);
    if (amt == -1) {
        nowSeek = 0;
    }
}
//上传时buffer的大小为BUFFER_SIZE_DEFAULT
int len;
byte[] buf = new byte[BUFFER_SIZE_DEFAULT];
while ((len = in.read(buf)) >= 0 && nowSeek < seekEnd) {
    dataOutStream.write(buf, 0, len);
    nowSeek += len;
    // 如果数据不足BUFFER_SIZE_DEFAULT,则减小buffer
    if (nowSeek + BUFFER_SIZE_DEFAULT > seekEnd) {
        buf = new byte[Integer.valueOf((seekEnd - nowSeek) + "")];
    }
}

举个例子:
https://github.com/xiaxveliang/Android_Net_HttpUrlConnect_Demo/blob/master/app/src/main/java/com/example/scalephoto/http/HttpMulti.java

========== THE END ==========

您对“我的文章”有任何疑问,可用微信扫描以下“二维码”向我提问!

在这里插入图片描述

如果文章对您有帮助,请扫描以下二维码支持我!

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页