【发布时间】:2016-05-05 20:40:04
【问题描述】:
根据文件扩展名,我希望将文件存储在特定的 AWS 存储桶中。我尝试将函数传递给 storage 选项,类似于动态定义 upload_to 的方式。
但是,这并没有给出预期的结果。在我的模板中,当我尝试使用 href 到 document.docfile.url 时,链接不起作用。
检查外壳,发生这种情况
Document.objects.all()[0].docfile.storage.bucket
<Bucket: <function aws_bucket at 0x110672050>>
Document.objects.all()[0].docfile.storage.bucket_name
<function myproject.myapp.models.aws_bucket>
期望的行为是
Document.objects.all()[0].docfile.storage.bucket_name
'asynch-uploader-txt'
Document.objects.all()[0].docfile.storage.bucket
<Bucket: asynch-uploader-txt>
这是我的models.py 文件:
# -*- coding: utf-8 -*-
from django.db import models
from storages.backends.s3boto import S3BotoStorage
def upload_file_to(instance, filename):
import os
from django.utils.timezone import now
filename_base, filename_ext = os.path.splitext(filename)
return 'files/%s_%s%s' % (
filename_base,
now().strftime("%Y%m%d%H%M%S"),
filename_ext.lower(),
)
def aws_bucket(instance, filename):
import os
filename_base, filename_ext = os.path.splitext(filename)
return 'asynch-uploader-%s' %(filename_ext[1:])
class Document(models.Model):
docfile = models.FileField(upload_to=upload_file_to,storage=S3BotoStorage(bucket=aws_bucket))
为什么aws_bucket 是作为函数而不是字符串传递的,就像upload_file_to 那样?我该如何纠正?
【问题讨论】:
标签: python django boto django-storage