在我的應用程序中,我使用Zend_Service_Amazon_S3來存儲一些大的媒體文件。當用戶下載文件時,應用程序首先將文件複製到本地服務器,然後從該文件連同一些頭文件強制下載文件發送到瀏覽器。如何將文件從S3傳輸到瀏覽器?
有沒有辦法讓Amazon直接將文件流式傳輸到瀏覽器,而無需將整個文件複製到本地服務器?理想情況下,應用程序仍然可以選擇強制下載文件的名稱(在很多情況下,它與亞馬遜上的文件不同)。
在我的應用程序中,我使用Zend_Service_Amazon_S3來存儲一些大的媒體文件。當用戶下載文件時,應用程序首先將文件複製到本地服務器,然後從該文件連同一些頭文件強制下載文件發送到瀏覽器。如何將文件從S3傳輸到瀏覽器?
有沒有辦法讓Amazon直接將文件流式傳輸到瀏覽器,而無需將整個文件複製到本地服務器?理想情況下,應用程序仍然可以選擇強制下載文件的名稱(在很多情況下,它與亞馬遜上的文件不同)。
一種解決方案是使用反向代理服務器,它將請求代理到Amazon S3,但也會重寫響應頭以更改文件名並強制下載。
這將消除需要製作該文件的本地副本,但實際的數據傳輸仍將通過您的服務器。
我建議看看Nginx的這個,更具體地說,到proxy_pass和add_header配置選項。
另一種解決方案是使在S3文件的臨時副本(使用PUT對象複製調用,這樣就不需要將其傳送到您的服務器),然後設置Content-Type和Content - 在此對象上放置標題以強制下載。
然後,您可以將這些文件直接從S3傳輸到客戶端的瀏覽器,但您需要定期在S3上進行清理,因爲下載完成後它們不會自動刪除。
謝謝。我在對象上設置了Content-Type和Content-Disposition標題,並且使用amazon鏈接讓用戶直接從Amazon下載文件 – murze