由於Object一般都很大,幾十GB都屬於正常現象,所以上傳或下載的過程中難免回遇到網路不穩的問題導致中斷
用過chrome的人都知道,如果下載到一半失敗了,可以按右鍵然後繼續,從中間下載,又或是用過著名的FTP工具-Filezilla,有時候上傳一個文件到server,但是中斷了,如果再把原來的文件拖進去,可以不用重新上傳
那這是怎麼做到的呢?首先,我們必須在object的上傳和下載API實作這個功能,我們可以讓使用者多傳幾個參數,例如開始位置和長度,因為object本質上是個非結構化數據,就是一個很長的byte array組成,接下來可以把下載和上傳拆開來講
下載
先說下載是因為下載比較簡單,如果沒意外的話,前端只要一直下載就好,如果遇到斷網,前端會記錄好已經下載多長的資料,根據長度作為起始位置繼續下載,所以在下載前,前端需要向server要一個object的長度大小
上傳
上傳就稍微複雜一點,他不能一直上傳直到斷線,因為前端不知道上傳到哪裡斷了,所以解決方法是一小段一小段上傳,例如一次request就上傳4MB,server回傳OK代表這一小塊上傳成功
當然,以上的方法都是基本的架構,想要更有效率更快的方法還有更多的演算法,本次Lab只實作了上述最簡單的方法思路