【问题标题】:django-storages upload to S3 closes server with no errordjango-storages 上传到 S3 关闭服务器,没有错误
【发布时间】:2019-12-28 12:57:17
【问题描述】:

我正在使用 Django 2.xdjango-storages 将媒体文件上传到 S3 存储桶

我的模型是这样的

class Media(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, default=None)
    file = models.FileField(upload_to=get_media_upload_path)

Django 设置有

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_STORAGE', 'test-bucket')
AWS_DEFAULT_ACL = 'public-read'

并且设置了环境变量

AWS_ACCESS_KEY_ID=my-key
AWS_SECRET_ACCESS_KEY=my-secret

当我从邮递员上传文件时,它会关闭服务器而没有任何错误。

我尝试调试 DRF Serializer 的保存方法

def save(self, **kwargs):
    log.info('Saving with kwargs: {}'.format(kwargs))
    new = super().save(**kwargs)
    log.info('Saved: {}'.format(new))
    return new

它打印第一行,但在super().save() 行之后没有输出。

从设置文件中删除django-storages 配置工作正常,并将文件上传到本地目录。

编辑 2:从 Django shell 上传

使用以下命令从 Django shell 上传

file = File(open('/path/to/file'))
m = Media(user=user, file=file)
m.save()

报错

File "/home/scanova/.virtualenvs/qcg-TqOLHEIu/lib/python3.7/site-packages/s3transfer/upload.py", line 86, in read
   return self._fileobj.read(amount)
File "/home/scanova/.virtualenvs/qcg-TqOLHEIu/lib/python3.7/codecs.py", line 322, in decode
   (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte

【问题讨论】:

  • 您是否尝试过使用 django 的 shell 上传(用于调试目的)?
  • 我试过用 Django 的 shell,检查 Edit 2
  • 您是否尝试在运行时创建一些存储桶,如果是,则 AWS_AUTO_CREATE_BUCKET=True 可能是导致错误的原因。您还可以检查您的 IAM 政策
  • 不,已经有一个桶了。文件上传较早。它突然停止了。
  • @AnujTBE 尝试使用 utf-8 编码打开文件

标签: django django-storage python-django-storages


【解决方案1】:

在我也为此苦苦挣扎之后,我终于发现添加 boto3 调试日志非常有用。在Django Shell中,在执行m.save()之前,请启用boto3日志:

import boto3
boto3.set_stream_logger('')

这将为您提供 django-storages 尝试做的大量信息。就我而言,它连接了静态和媒体文件的存储桶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2014-06-06
    • 1970-01-01
    • 2014-07-01
    • 2010-10-09
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多