2012-07-29 106 views
4

我通過AJAX將文件上傳到Amazon S3(使用瀏覽器File API並將實際上傳腳本作爲iframe存儲在亞馬遜S3上以繞過亞馬遜S3跨站點的問題,禮貌jquery文件上傳的想法)。我有這個工作,它適用於小文件(< 50 MB左右)。不過,我正在尋找在Amazon S3上存儲非常大的文件。我想存儲配置好的虛擬機,大小可能超過10 GB。將極大(10+ GB)文件分割並上傳到Amazon S3

從我對HTML5文件API的理解中,可以將大文件分塊成小型的客戶端並上傳。然後服務器代碼負責將這些文件連接在一起並將文件移動到S3。我理解這個概念,但我不確定最佳實施。

我使用Heroku作爲應用服務器,通常我會直接將文件上傳到Amazon S3,完全跳過Heroku的服務器。但是,如果我將上傳塊分成小塊,那麼在將它們放入S3之前,必須先加入一些代碼才能加入。但Heroku對於可以使用多少數據有一定的限制,我不認爲加入10 GB文件可以在服務器上有效地發揮作用(不是100%確定但可疑)。

所以我當前的想法是,我必須在我的應用程序發佈上傳部件的Amazon EC2服務器上安裝Web服務應用程序。 EC2應用程序然後負責加入上傳部分並將最終加入的文件放入S3中​​。將文件加載到S3後,S3會向Heroku上託管的原始應用程序發送響應,然後創建一個指向S3中存儲文件的資源。

是否有任何現實的方法來解決有一個單獨的EC2服務器加入文件?在EC2和S3之間發送文件沒有任何費用,但我不想維護2個應用程序來完成我想要的功能(Heroku上的主應用程序和EC2上的文件加入應用程序)。

+0

你真的確定要做到這一點通過瀏覽器?除了複雜性之外,上傳10GB +文件意味着將頁面打開一段時間。這是現實的(如果頁面已關閉)?你不是更好的做一個小應用程序dat可以從桌面訪問S3(或者甚至買一個)? – Roger 2012-08-22 07:11:35

+0

@羅傑爾你是對的,它可能不是最好的解決方案(如果是一個可行的解決方案)。我試圖避免在客戶端安裝任何東西,但對於非常大的文件看起來不太現實。你提到的路線幾乎是我傾向的路徑。 – 2012-08-22 11:50:54

+0

是的。根據平臺,您可以使用例如傳輸(在Mac上即時通訊)並創建一個液滴(拖放文件以上傳)。花費一點錢,但以小時數計算,你無法打敗;-) – Roger 2012-08-22 12:25:39

回答

3

Amazon S3 API支持分段上傳。文件在S3端自動合併。 我不知道新的html5文件API是多麼靈活..如果你設法直接上傳一個文件與S3(哇)交談,你可能也可以使用多部分功能。

我可以要求提供一個當前實施的樣本嗎?讓我好奇的

如何多上傳到S3正在爲多上傳 http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingRESTAPImpUpload.html

最棘手的事情 http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html

REST API(如果可能)將可能分裂的(大)文件瀏覽器

在你開始爲了保持冷靜而開發某些東西之前,請確保你的原始問題沒有更實用/實用的解決方案

編輯:

文件切片是可能的 - 確實:html5岩石!

如果實現了這口井,你可以去可能無限的filesizes沒有爆炸的用戶內存

https://developer.mozilla.org/en/docs/DOM/Blob

http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-slicing-files