gpt4 book ai didi

django - 如何使django上传的图片显示在CloudFront前端+ Beanstalk后端

转载 作者:行者123 更新时间:2023-12-04 09:32:47 25 4
gpt4 key购买 nike

我已经使用 AWS Beanstalk 创建了一个后端 django 应用程序,以及一个使用 cloudfront(加上 S3)部署的前端 reactjs 应用程序

我在后端有一个模型

class EnhancedUser(AbstractUser):
# some other attributes
picture = models.ImageField(blank=True)

我的settings.py有

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '<my_elastic_beanstalk_domain>/media/'

由于我使用的是云端,如果我只是将 MEDIA_URL 设置为 /media/,它只会将 /media/ 附加到我的云端 url,所以我必须将它硬编码到我的后端 url

然后,按照 django 文档,我将静态部分添加到我的 urls.py

urlpatterns = [
path('admin/', admin.site.urls),
# some other urls
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

请注意,django 文档确实提到我们不能为 MEDIA_URL 使用绝对 url,但目前我没有其他解决方案

当我上传图片时,它没有存储在正确的位置,但我无法使用 url 打开它。它返回 404 表示 img 的 url 不是 urls 列表的一部分

我的问题是:

  1. 如何设置才能显示图像
  2. 由于图像将通过用户/管理员更新,这些图像将存储在 beantalk 中创建的 EC2 实例中,所以每次我部署时,我认为它们都会被删除。我该如何防止这种情况?

最佳答案

看看使用 django-storages保存您的上传。我使用 S3 来存储上传的 django/docker/EB 部署,并包含看起来像这样的 django 设置(我将它们保存在 settings/deployment.py 中):

if 'AWS_ACCESS_KEY_ID' in os.environ:
# Use Amazon S3 for storage for uploaded media files
# Keep them private by default
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# Amazon S3 settings.
AWS_ACCESS_KEY_ID = os.environ["AWS_ACCESS_KEY_ID"]
AWS_SECRET_ACCESS_KEY = os.environ["AWS_SECRET_ACCESS_KEY"]
AWS_STORAGE_BUCKET_NAME = os.environ["AWS_STORAGE_BUCKET_NAME"]
AWS_S3_REGION_NAME = os.environ.get("AWS_S3_REGION_NAME", None)
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_AUTO_CREATE_BUCKET = False
AWS_HEADERS = {"Cache-Control": "public, max-age=86400"}
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = 'private'
AWS_QUERYSTING_AUTH = True
AWS_QUERYSTRING_EXPIRE = 600
AWS_S3_SECURE_URLS = True
AWS_REDUCED_REDUNDANCY = False
AWS_IS_GZIPPED = False

MEDIA_ROOT = '/'
MEDIA_URL = 'https://s3.{}.amazonaws.com/{}/'.format(
AWS_S3_REGION_NAME, AWS_STORAGE_BUCKET_NAME)
USING_AWS = True

关于django - 如何使django上传的图片显示在CloudFront前端+ Beanstalk后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62748418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com