適用場景

之前提到的上傳方式,比如簡單上傳表單上傳斷點續傳上傳等,建立的Object都是Normal類型,這種Object在上傳結束之後內容就是固定的,只能讀取,不能修改。如果Object內容發生了改變,只能重新上傳同名的Object來覆蓋之前的內容,這也是OSS和普通檔案系統使用的一個重大區別。

正因為這種特性,在很多應用場景下會很不方便,典型比如視頻監控、ApsaraVideo for Live領域等,視頻數據在即時的不斷產生。如果使用其他上傳方式,只能將視頻流按照一定規律切分成小塊然後不斷的上傳新的Object。這種方式在實際使用上存在很明顯的缺點:

  • 軟體架構比較複雜,需要考慮檔案分塊等細節問題。
  • 需要有位置保存元數據,比如已經生成的Object列表等,然後每次請求都重複讀取元數據來判斷是否有新的Object生成。這樣對伺服器的壓力很大,而且客戶端每次都需要發送兩次網路請求,延時上也會有一定的影響。
  • 如果Object切分的比較小的話,延時比較低,但是眾多Object會導致管理起來很複雜。如果Object切分的比較大的話,數據的延時又會很高。

為了簡化這種場景下的開發成本,OSS提供了用戶通過追加上傳(Append Object)的方式在一個Object後面直接追加內容的功能。通過這種方式操作的Object的類型為Appendable Object,而其他的方式上傳的Object類型為Normal Object。每次追加上傳的數據都能夠即時可讀。

如果使用追加上傳,那麼上述場景的架構就變得很簡單。視頻數據產生之後即時地通過追加上傳到同一個Object,而客戶端只需要定時獲取該Object的長度與上次讀取的長度進行對比,如果發現有新的數據可讀,那麼就觸發一次讀操作來獲取新上傳的數據部分即可。通過這種方式可以很大的簡化架構,增強擴充性。

不僅在視頻場景,在日誌追加上傳的場景下,追加上傳也能發揮作用。

上傳限制

  • 大小限制:在這種上傳方式下,Object不能超過5GB。
  • 命名限制
    • 使用UTF-8編碼
    • 長度必須在1-1023位元組之間
    • 不能以“/”或者“\”字元開頭
  • 檔案類型:只有通過追加上傳建立的檔案才可以後續繼續被追加上傳。也就是說,其他通過簡單上傳、表單上傳、分區上傳得到的檔案,不能在這些檔案後面追加上傳新的內容。
  • 後續操作限制:通過追加上傳的檔案,不能被複製,可以修改檔案本身的meta資訊。

上傳的安全及授權

為了防止第三方往開發人員的Bucket未經授權上傳,OSS提供了Bucket和Object等級的存取權限控制,詳細解釋見存取控制。為了授權給第三方上傳,OSS除了Bucket和Object等級的存取權限外,還提供了帳號等級的授權,見上傳安全之授權第三方

上傳後續操作

如果上傳的是圖片需要處理,可以使用上傳圖片後雲端處理。如果上傳的是音頻或者視頻檔案也可以使用媒體轉碼

功能使用參考

说明
追加上傳不支援上傳回調操作。

最佳實踐

相關參考連結