gpt4 book ai didi

django - 使用带有 S3boto 后端的 django-storages 保存到 S3 时,如何设置 "Content-Type"?

转载 作者:行者123 更新时间:2023-12-01 07:33:26 25 4
gpt4 key购买 nike

我正在使用 django-storagess3boto作为后端。

我有一个带有两个文件夹的存储桶 - 一个用于 static一个用于 media .我使用 django-s3-folder-storage 实现了这一点.

除了使用模型保存到 S3 之外,我还想实现一个图像调整大小和缓存功能来将文件保存到 S3。为此,我直接与我的 S3 存储桶交互。代码有效,但 Content-Type未在 S3 上设置。

在 iPython 中:

In [2]: from s3_folder_storage.s3 import DefaultStorage

In [3]: s3media = DefaultStorage()

In [4]: s3media
Out[4]: <s3_folder_storage.s3.DefaultStorage at 0x4788780>

测试我们正在访问正确的存储桶 - storage_test是我之前创建的:
In [5]: s3media.exists('storage_test')
Out[5]: True

In [6]: s3media.open("test.txt", "w")
Out[6]: <S3BotoStorageFile: test.txt>

In [7]: test = s3media.open("test.txt", "w")

In [8]: test
Out[8]: <S3BotoStorageFile: test.txt>

In [9]: test.key.content_type = "text/plain"

In [10]: test.write("...")

In [11]: test.close()

In [12]: test = s3media.open("test.txt", "w")

In [13]: test.key.content_type
Out[13]: 'binary/octet-stream'

我也试过代替 In [9]使用 test.key.metadatatest.key.set_metadata .他们都没有这样做。

如何设置正确的 Content-Type?

最佳答案

如果你阅读类 S3BotoStorageFile 中的源代码和功能 write ,标题仅从 2 个位置更新,

  • upload_headers.update(self._storage.headers)哪里self._storage.headers取自 AWS_HEADERS
  • self._storage.default_acl

  • 而在功能 _flush_write_buffer只有 self._storage.headers被认为。检查线路 headers = self._storage.headers.copy()
    所以更新 test.key.content_type不会工作。

    而不是 test.key.content_type = "text/plain"In [9]:尝试使用 test._storage.headers['Content-Type'] = 'text/plain' ,它应该工作。

    关于django - 使用带有 S3boto 后端的 django-storages 保存到 S3 时,如何设置 "Content-Type"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019737/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com