1. 程式人生 > >Http實現大檔案分段下載

Http實現大檔案分段下載

http不可能直接讀取很大的檔案一定會導致oom,而且傳送很容易失敗,一旦失敗又要重新開始傳輸,這樣體驗可想而知,最後我們採用斷點續傳的方式來實現,

整個過程是分3步來完成的

功能描述:

上傳視訊metadata資訊,metadata資訊包括:md5、檔案容量大小、檔名稱。

返回視訊的上傳資訊: 如果正在上傳,返回當前檔案的進度;如果上傳成功,返回檔案的儲存url,視訊截圖的尺寸、視訊時長

功能描述:

獲取檔案的上傳資訊,如果正在上傳返回當前檔案的進度; 如果上傳成功返回檔案的儲存url,如果是視訊返回視訊時長,和截圖.

功能描述:

分塊順序上傳檔案,最終返回視訊時長、視訊縮圖等資訊(由於使用者錄製視訊較大,客戶端播放很慢、卡,最終通過伺服器非同步壓縮處理的方式解決體驗)

4publish

功能描述:

將返回的視訊資訊傳送到邏輯伺服器完成釋出

後面會考慮將這塊的內容封裝成一個上傳元件,最後上客戶端斷點上傳關鍵程式碼,整體流程就不貼出來了。

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;}

}