2017-05-05 31 views
0

我們的應用程序根據需要生成大型(20GB +)ZIP壓縮文件。我們希望將產生的數據流上傳到S3存儲桶,而無需緩衝整個文件。我們事先不知道數據的大小。在無緩衝的情況下將大文件以流的形式上傳到S3中。

我們一直試圖使這項工作與TranserUtility,但似乎無法得到沒有緩衝的上傳。這個問題似乎是我們需要一些東西在S3上傳消耗的同時在流上產生內容。我們已經嘗試了幾個與TPL無關的場景。

documentation似乎解釋瞭如何執行基於文件的操作,並且沒有討論如何使用流。

任何人都知道我們用例的簡單解決方案嗎?

回答

0

不幸的是,它似乎是分段上傳API的一種方式,因爲您也會收到一個塊上傳,也是s3的一部分。這是一個演示如何做的例子。

這是你的應用程序需要做什麼:

  1. 獨立的源對象爲多個部分。這可能是一個邏輯上的分離,您可以簡單地決定使用多少部分以及它們的大小,或者使用Linux split命令或類似命令(例如Windows的hk-split命令)完成的實際物理分隔。
  2. 啓動分段上傳並接收上傳ID。對S3的這個請求必須包含通常伴隨S3 PUT操作(Content-Type,Cache-Control等)的所有請求頭。
  3. 上傳伴隨上傳ID和零件號碼(1-10,000)的每個零件(對象數據的連續部分)。零件編號不必是連續的,而是零件的順序決定零件在零件內的位置。 S3會針對每次上傳返回一個ETag。
  4. 通過爲對象的每個部分提供上傳ID和部件號/ ETag對來完成上載。

https://aws.amazon.com/blogs/aws/amazon-s3-multipart-upload/

http://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html

編輯:

另一種選擇是使用創建的Kinesis流捕獲所有數據,然後將其存儲在S3。有一個預先構建的(Java)庫,即Amazon Kinesis連接器庫。

https://github.com/awslabs/amazon-kinesis-connectors

.NET客戶端庫https://github.com/awslabs/amazon-kinesis-client-net

https://aws.amazon.com/kinesis/streams/details/

+0

我們與整合API產生其輸出到必須傳入流。我們正在試圖創建一個直寫只有自定義的流實現,將一次緩衝一個塊,然後作爲一個部分上傳。震驚,這不存在。 Azure Blob Storage支持開箱即用。 – kenchilada

+0

@kenchilada我添加了有關使用Kinesis Streams並將其保存到s3的信息。 – strongjz

相關問題