1

我有一个 Django Web 应用程序,它允许用户上传他们的显示图片。一些用户可以看到此显示图片,但不是每个人(不是所有用户)都应该有权访问此图片。话虽如此,在开发过程中,我曾经将其保存在本地机器上。在我的设置文件中,我有

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 实例(我使用 Amazon Web Services)并创建

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

目录,然后开始保存显示图像。

我的问题是,这是将私人用户上传的图像保存在服务器上的正确/最佳方式吗?还是我也应该为此使用 S3?(根据我的阅读,S3 上的图像存储在云中,任何人都可以从 URL 访问)现在有没有办法在我的情况下使用 S3?

4

1 回答 1

0

将图像存储在文件夹中的 EC2 实例上还是 S3 存储上的问题与文件隐私无关。

MEDIA_ROOT 定义媒体文件夹的位置。MEDIA_URL 定义了提供媒体时形成的 URL。

现在,如果我们使用默认文件系统存储,我们最终将文件保存在 MEDIA_ROOT 中。我们可以通过设置文件中的一些附加配置将存储更改为 S3。(文档在这里

现在可以通过限制对 URL 的访问来保护基于用户的文件。为此,可以使用在使用 nginx 提供文件时使用的 X-Accell-Redirect 标头来保护媒体 URL。(例如:此处)。如果您继续使用 S3 存储来提供媒体文件(在生产环境中更可取) - S3 存储提供了获取受保护的媒体 URL 的功能,该 URL 可以传递给客户端以检索媒体。这些网址可在有限的时间内访问。

于 2014-10-07T10:41:20.337 回答