簡體   English   中英

使用Heroku上的Django將大文件上載到AWS S3 Bucket,沒有30秒請求超時

[英]Uploading Large files to AWS S3 Bucket with Django on Heroku without 30s request timeout

我有一個django應用程序,允許用戶上傳視頻。 它托管在Heroku上,以及存儲在S3 Bucket上的上傳文件。 在從Django app獲得預先簽名的請求后,我使用JavaScript直接將文件上傳到S3。 這是由於Heroku 30s請求超時。 無論如何,我可以通過Django后端上傳大文件而不使用JavaScript並破壞用戶體驗嗎?

您應該考慮以下幾點來解決您的問題。

  • 為什么你的文件不應該到你的django-server然后轉到s3:將文件發送到django服務器然后將它們發送到s3只是浪費計算能力和帶寬。 接下來就是為什么當你可以直接將文件發送到s3存儲器時將文件發送到django服務器。
  • 如何在不影響UX的情況下將文件上傳到s3:將文件發送到django服務器肯定不是一個選項,因此您必須在前端處理此問題。 但前端有自己的限制,如有限的內存。 它將無法處理非常大的文件,因為一切都被加載到RAM中,如果它是一個非常大的文件,瀏覽器最終會耗盡內存。 我建議你使用像dropzone.js這樣的東西。 它不會解決內存問題,但它肯定可以為用戶提供良好的用戶體驗,如顯示進度條,文件數等。

另一個答案中的要點是有效的。 對“無論如何我可以通過Django后端而不使用JavaScript上傳大文件”的問題的簡短回答是“並非沒有切斷Heroku”。

請記住,傳輸到dynos的任何數據都要通過Heroku的路由網格,這就是強制執行30秒請求限制以保存自己的有限資源。 任何類型的長時間運行事務都會占用可用於提供其他請求的帶寬/計算/等,因此Heroku應用限制來幫助保持數千個動態的數據移動。 上傳文件時,首先會受到服務器客戶端帶寬的限制。 然后,除了你的dyno實際處理的任何處理之外,你將受到你的dynos和S3之間的帶寬的限制。

文件越大,傳輸數據的可能性就越大,超過30秒超時,特別是在不可靠網絡上的客戶端的步驟1中。 創建從客戶端到S3的直接路徑是一種合理的折衷方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM