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。这些网址在有限的时间段内可以访问。