2015-11-13 133 views
1

我正在使用Azure Media Services和Node.js構建視頻服務 到現在爲止,一切都很順利,但是當我嘗試將應用程序部署到Azure Web Apps進行託管時,任何大型文件都會因404.13錯誤而失敗。如何通過Azure網站上的Node.js應用程序將大文件流上傳到Azure Blob存儲?

是的,我知道maxAllowedContentLength而不是,這不是一個解決方案。它只能達到4GB,這是可悲的 - 即使HDR環境地圖現在也很容易超過這個數量。我需要讓用戶上傳最大150GB的文件。然而,當azure網絡應用程序接收到多部分請求時,它似乎將其緩衝到內存中,直到達到某個字節或幾秒的閾值(如果我的連接速度較慢,則返回給我一個404.13或502)在運行我的任何一個服務器邏輯。

我在服務器代碼中嘗試了Transfer-Encoding: chunked標題,但即使這樣做會有所幫助,因爲Web Apps不會讓代碼運行,但實際上並不重要。

備案:我在後端使用Sails.js,Skipper正在處理到Azure Blob服務的流管道。無論文件大小如何,Localhost顯然都能正常工作。我在MSDN論壇上重複了這個問題,但這些問題一直很慢。你可以去那裏看看我迄今發現:enter link description here

客戶方我使用Ajax FormData序列化的字段(一個文本字段和一個文件),並將它們發送,使用progress甚至跟蹤上傳進度。

有什麼辦法可以使這項工作?我只是希望它能讓我的服務器端邏輯處理數據流,而不會緩衝流血的事情。

回答

4

而不是通過您的Web應用程序運行所有這些數據,您最好將您的客戶端直接上載到您的Azure blob存儲帳戶中的容器。

您需要在Azure存儲帳戶上啓用CORS來支持此操作。然後,在您的Web應用程序中,當用戶需要上傳數據時,您將爲您希望客戶端上傳到的存儲帳戶容器生成一個SAS令牌並將其返回給客戶端。客戶端然後將使用SAS令牌將文件上傳到您的存儲帳戶。

在後端上,您可以啓動Web作業,以在文件上傳完成後對文件執行任何處理。

Azure存儲團隊的this blog post中提供了更多詳細信息和樣例ajax代碼。

+0

似乎是目前唯一的解決方案,但是我想看看是否有任何微軟員工對此有任何說法。而這對於Web Apps來說是否可能。作爲無緩衝流的整個數據真的是2015年的基本功能,看到Web應用程序不支持這一點非常令人失望。所以,如果它以某種方式做,我只是做錯了,我想看到的解決方案,我相信也有很多其他人。與此同時,我會按照自己的方式構建它(這意味着我的代碼中的30%也會報廢)。我永遠不會推薦Azure作爲節點主機。 – Megakoresh

+0

(正如,來自Web應用部門XD的Microsoft員工) – Megakoresh

+0

好的我已經實現了這個解決方案。它的工作原理,儘管我不得不放棄了以前的許多工作。我想這是一個學習經驗...... – Megakoresh