Http文件分块上传

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

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

猜你喜欢

转载自blog.csdn.net/aiwusheng/article/details/64437714
今日推荐