【问题标题】:Getting url after a saving file (not using django model)保存文件后获取 url(不使用 django 模型)
【发布时间】:2018-06-25 23:46:52
【问题描述】:

我正在尝试检索保存后立即保存的文件的 url。

请注意,我没有使用 Django model 来保存要保存的文件。我正在使用default_storage.save() 手动保存文件。显然,使用模型很容易检索 url。

目前我有path = default_storage.save(somefile, ContentFile(upload.file.read())) )。我正在使用 AWS Amazon Web Services S3。文件正在保存,但是我无法获取访问文件的 url,我只是用path 取回文件名。如何获取网址?

如果是在本地,我可以这样做:

path = default_storage.save(somefile, ContentFile(upload.file.read()))
full_path = os.path.join(settings.MEDIA_ROOT, path)

获取 url/路径。有什么我可以做的吗?

【问题讨论】:

    标签: django amazon-web-services amazon-s3 boto3 django-storage


    【解决方案1】:

    试试这个

    settings.py
    
    MEDIA_ROOT = URL_BUCKET_S3  #it can be another variable different from MEDIA_ROOT
    

    还有views.py

    path = default_storage.save(somefile, ContentFile(upload.file.read()))
    full_path = settings.MEDIA_ROOT + path
    

    与我在项目中的工作方式非常相似

    【讨论】:

    • 您将URL_BUCKET_S3 设置为什么?实际网址?你怎么知道的?还是必须手动写https://bucket_name....amazonaws.com...etc
    • 是的。您存储桶 s3 的 URL
    • 嘿,我将您的答案标记为正确,但是您需要将full_path = os.path.join(settings.MEDIA_ROOT, path) 更改为full_path = settings.MEDIA_ROOT + path。我认为因为 os.path 会导致问题。然而,也许这对你有用。
    • 你是对的,对不起,复制你所拥有的,我没有想到这一点。 os.path 为您提供绝对路径,在这种情况下,它是一个 url 是没有必要的。我更正了我的答案,感谢您的观察。
    • 如果你想要default_storage.url(path),你也可以使用它来获取url。您可以将其包含在答案中作为替代方案。我什至不知道默认存储有url 方法。它也更干净。
    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2020-02-12
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多