Http大文件分段下载

http不可能直接读取很大的文件一定会导致oom,而且传送很容易失败,一旦失败又要重新开始传输,这样体验可想而知,最后我们采用断点续传的方式来实现,

整个过程是分3步来完成的

1、uploadVedioMetaDataInfo

功能描述:

上传视频metadata信息,metadata信息包括:md5、文件容量大小、文件名称。

返回视频的上传信息:如果正在上传,返回当前文件的进度;如果上传成功,返回文件的保存url,视频截图的尺寸、视频时长

2、getUploadVedioInfo

功能描述:

获取文件的上传信息,如果正在上传返回当前文件的进度;如果上传成功返回文件的保存url,如果是视频返回视频时长,和截屏.

3、uploadFileByBlock

功能描述:

分块顺序上传文件,最终返回视频时长、视频缩略图等信息(由于用户录制视频较大,客户端播放很慢、卡,最终通过服务器异步压缩处理的方式解决体验)

4、publish

功能描述:

将返回的视频信息发送到逻辑服务器完成发布

后面会考虑将这块的内容封装成一个上传组件,最后上客户端断点上传关键代码,整体流程就不贴出来了。

public class FileUtils {

public static byte[] getBlock(long offset, File file, int blockSize) {

byte[] result = new byte[blockSize];

RandomAccessFile accessFile = null;

try {

accessFile = new RandomAccessFile(file, “r”);

accessFile.seek(offset);

int readSize = accessFile.read(result);

if (readSize == -1) {

return null;

} else if (readSize == blockSize) {

return result;

} else {

byte[] tmpByte = new byte[readSize];

System.arraycopy(result, 0, tmpByte, 0, readSize);

return tmpByte;

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (accessFile != null) {

try {

accessFile.close();

} catch (IOException e1) {

}

}

}

return null;

}

}

    原文作者:专属守护
    原文地址: https://www.jianshu.com/p/3b8cec6f07ae
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞