当前位置: 首页 > 知识库问答 >
问题:

将Django设置为提供来自Amazon S3的媒体文件

暴阳州
2023-03-14

我正试图在Heroku部署我的项目,但媒体文件(图像)过了一段时间就被删除了,所以有人告诉我需要使用一个名为“Amazon S3”的服务,我的问题是,如何配置我的项目来使用该服务。谁能帮帮我吗?

共有2个答案

呼延辰龙
2023-03-14

先看看这个http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html

基本上,这里不需要Django来提供任何服务,而是需要确保静态引用指向另一个域(S3域),而不是Heroku域。

池麒
2023-03-14

您可以按照本文中的步骤操作:

http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/

但要做到这一点,有一个小教程可以:

步骤1-安装boto和django存储:

$ pip install boto django-storages

将django存储添加到已安装的应用程序:

INSTALLED_APPS += ('storages',)

步骤2-创建S3存储桶:

转到https://console.aws.amazon.com/s3/home并创建它。

  • 看:https://devcenter.heroku.com/articles/s3如果你有任何疑问。

步骤3-获取您的凭据:

转到https://console.aws.amazon.com/iam/home?#security_credential,单击“访问密钥”并创建它。

步骤4-将凭据添加到django设置:

首先,创建一个名为s3utils的文件。项目文件夹中的py,包含以下内容:

from storages.backends.s3boto import S3BotoStorage                                            
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')              
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media') 
  • 请参阅:如何使用Django存储和Amazon S3设置Django项目,但使用不同的静态文件和媒体文件文件夹

我更喜欢使用所有这些配置作为环境变量,因此我建议您执行以下操作:

$ heroku config:set AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY S3_BUCKET_NAME=YOUR_BUCKET_NAME

然后,将此项放入您的设置中:

AWS_STORAGE_BUCKET_NAME = os.environ['S3_BUCKET_NAME']                          
MEDIA_ROOT = '/media/'                                                          
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME                
MEDIA_URL = S3_URL + MEDIA_ROOT                                                 
DEFAULT_FILE_STORAGE = 'YOUR_PROJECT.s3utils.MediaRootS3BotoStorage'                 
STATICFILES_STORAGE = 'YOUR_PROJECT.s3utils.StaticRootS3BotoStorage'                 
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']                             
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']  

第5步-再次运行集合静态

您需要再次收集静态文件,以便将其放入Amazon。

heroku run python manage.py collectstatic

我希望这有帮助!

 类似资料:
  • 当我将dockerised django应用程序部署到digital ocean时,我在提供静态文件和媒体文件方面遇到问题。我在这里读过很多类似的问题,但到目前为止,没有一个答案对我有效。 大致按照这个指南,,https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/#nginx,我现在的状态是,我

  • 问题内容: 我在磁盘上有一个现有文件(例如/folder/file.txt),在Django中有一个FileField模型字段。 当我做 它将文件另存为file_1.txt(下次是_2,等等)。 我知道为什么,但是我不想要这种行为-我知道我想要与该字段关联的文件确实在那里等着我,我只想让Django指向它。 问题答案: 如果要永久执行此操作,则需要创建自己的FileStorage类 现在在模型中,

  • 问题内容: 我正在配置一个Django项目,该项目使用服务器文件系统来存储应用程序的静态文件()和用户上传的文件()。 我现在需要将所有内容托管在Amazon S3上,因此我为此创建了一个存储桶。使用django-storages与存储后端,我设法收集静态上传到S3斗: 然后,我遇到一个问题:存储桶中未使用和,因此存储桶根目录同时包含静态文件和用户上载的路径。 因此,我可以设置: 并在模板中使用这

  • /** 设置超媒体自定义参数 @param parameter 自定义参数 例如:@{@"token": @"18231yy31hh12",@"xxx": @"yyyy"} */ [Ntalker ntalker_setHyperMediaData:@{@"token": @"18231yy31hh12",@"xxx": @"yyyy"}];

  • 在本章中,我们将研究Joomla Media Settings 。 Joomla媒体设置有助于配置全局媒体文件选项,如文件格式,MIME规范,文件上传,文件大小等。 Joomla媒体设置 以下是用于设置Joomla媒体选项的简单步骤 - Step (1) - 进入System → Global Configuration ,如下面的屏幕所示。 单击Joomla Global Configurati

  • 问题内容: 我想爱Django,但是开发环境中的静态文件和媒体文件业务让我发疯。请把我从愚蠢中解救出来。 我在开发机器上。我的项目目录的根目录中有文件夹。 在settings.py我有:和。 在我有: 但是我获取媒体文件的唯一方法是通过引用/media/media/例如 。 我期望(并且想要) 谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法吗? 非常感谢你。 但这留下了两个问题: