【问题标题】:images not being uploaded in AWS S3 with django没有使用 django 将图像上传到 AWS S3
【发布时间】:2019-05-02 14:06:37
【问题描述】:

我想上传图片并将上传的图片加载回我的 webapp,之前在 S3 存储桶中加载的图片(我手动上传)在页面中呈现正常,但我在 S3 中上传图片时遇到问题。

下面是我的 settings.py 配置

INSTALLED_APPS = [

    'blog.apps.BlogConfig',
    'crispy_forms',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'storages',
]

AWS_ACCESS_KEY_ID = "given id"
AWS_SECRET_ACCESS_KEY = "given secret key"
AWS_STORAGE_BUCKET_NAME = "young-minds-files"
AWS_S3_URL = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_REGION_NAME = "us-west-2"

AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None

DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"

views.py

class PostCreateView(LoginRequiredMixin,CreateView):
    model = Post
    fields = ["title","content","image1","image2","image3"]
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

models.py

class Post(models.Model):
    title = models.CharField(max_length=100)
    category = models.CharField(max_length=100, default='Others')
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    image1 = models.ImageField(default='default_content.jpg', upload_to='content_pic')
    image2 = models.ImageField(default='default_content.jpg', upload_to='content_pic')
    image3 = models.ImageField(default='default_content.jpg', upload_to='content_pic')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk':self.pk})

模板

{% extends 'blog/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
{% load static %}
<section class="site-section">
  <div class="container">
    <div class="row mb-4">
      <div class="col-md-6">

      </div>
    </div>
    <div class="row blog-entries">
      <div class="col-md-12 col-lg-8 main-content">

        <form method="post" enctype="multipart/form-data">
          <fieldset class="form-group">
            <legend class="border-bottom mb-4"> Create Your Blog</legend>
            {% csrf_token %}
            {{ form|crispy }}
          </fieldset>
          <div class="row">
            <div class="col-md-6 form-group">
              <button type="submit" class="btn btn-primary">Post</button>
            </div>
          </div>

        </form>

      </div>
    </section >
    <!-- END main-content -->

    {% endblock content %}

以下是我尝试上传图片时的错误消息

提前致谢!

【问题讨论】:

    标签: python django amazon-web-services amazon-s3


    【解决方案1】:

    尝试使用这些设置以获得格式正确的网址:

    AWS_ACCESS_KEY_ID = "given id"
    AWS_SECRET_ACCESS_KEY = "given secret key"
    AWS_STORAGE_BUCKET_NAME = "young-minds-files"
    AWS_S3_URL = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
    

    【讨论】:

    • 我尝试按此顺序添加 AWS_S3_URL = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME 并在其下方放置 AWS_S3_REGION_NAME = "us-west-2" ,但我仍然收到相同的错误
    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2019-10-11
    • 2016-01-30
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多