我正在使用Django 2.x和django-storages将媒体文件上传到S3 Bucket。
我的模型就像
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