1

我有一個允許用戶上傳他們的顯示圖片的Django網絡應用程序。有些用戶可以看到這張圖片,但並非每個人(不是所有的用戶)都可以訪問這張圖片。這就是說,在開發中,我習慣將它保存在本地機器上。在我的設置文件,我不得不AWS/Django - 將私人用戶上傳的文件保存到S3或我的EC2實例上嗎?

MEDIA_ROOT = '/home/myProfile/Documents/thisFolder/uPhotosFolder' 
MEDIA_URL = '/media/' 

和Django的將節省的所有用戶上傳的圖片顯示,其位於我的機器上的媒體魯德(該uPhotosFolder)。

雖這麼說,我部署的(或至少我嘗試部署)的應用程序,當我離開我的MEDIA_ROOT和MEDIA_URL在我的設置文件

MEDIA_ROOT = '/home/myProfile/Documents/thisFolder/uPhotosFolder' 
MEDIA_URL = '/media/' 

,並試圖上傳圖片,它說訪問被否決。顯然,我必須進入我的EC2實例(我使用亞馬遜網絡服務),並創建

'/home/myProfile/Documents/thisFolder/uPhotosFolder' 

目錄,然後開始保存的顯示圖像。

我的問題是,這是保存私人用戶上傳的圖像在服務器上的正確/最好的方法嗎?或者我應該使用S3嗎? (從我讀的內容來看,S3上的圖像存儲在雲上,任何人都可以通過URL訪問)有沒有一種方法可以將S3用於我的情況?

+0

你可能想看看使用django-storage:http://django-storages.readthedocs.org/en/latest/ – Brandon 2014-09-24 23:31:34

回答

0

將圖像存儲在EC2實例上的文件夾或S3存儲上的問題與文件隱私無關。

MEDIA_ROOT定義媒體文件夾的位置。 MEDIA_URL定義服務媒體時形成的URL。

現在爲了存儲,如果我們使用默認的文件系統存儲,我們最終將文件保存在MEDIA_ROOT中。我們可以通過設置文件中的一些額外配置將存儲更改爲S3。 (Docs Here

現在可以通過限制訪問URL來保護用戶的文件。對於這種媒體URL可以使用X-Accell-Redirect頭使用nginx來提供文件的保護(例如:Here)。 如果您繼續使用S3存儲來提供媒體文件(在生產環境中更可取) - S3存儲提供的功能是獲取可傳遞給客戶端以檢索媒體的媒體的受保護URL。這些網址在有限的時間段內可以訪問。