【问题标题】:Can't Set Properties for Azure Blob with Azure SDK for Python无法使用 Azure SDK for Python 为 Azure Blob 设置属性
【发布时间】:2021-04-20 13:54:42
【问题描述】:

我正在尝试在我的 blob 位置中设置文件的属性,但不知何故它不是持久的。

from azure.storage.blob import BlobServiceClient, ContentSettings
connect_str="connectionString"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# Instantiate a ContainerClient
container_client = blob_service_client.get_container_client("$web")

# List files in blob folder
blobs_list = container_client.list_blobs()
for blob in blobs_list:
    print(blob.content_settings.content_type) # application/octet-stream
    blob.content_settings.content_type="text/html; charset=utf-8"
    print(blob.content_settings.content_type)

输出:

应用程序/八位字节流

文本/html;字符集=utf-8

但是当我再次尝试运行时:

blobs_list = container_client.list_blobs()
for blob in blobs_list:
    print(blob.content_settings.content_type)

我仍然收到application/octet-stream,但我无法理解为什么?

【问题讨论】:

    标签: python azure-blob-storage azure-sdk-python


    【解决方案1】:

    您更改了一个局部变量,您需要显式调用来更改 Azure 本身的属性。您需要构建一个 blobclient 并调用set_http_headers。从循环内部:

        blob_client = container_client.get_blob_client(blob)
        blob_client.set_http_headers(
            content_settings=ContentSettings(
                content_type="text/html; charset=utf-8"
            )
        )
    

    如果您认为此示例应该更容易找到,请随时在 Azure SDK for Python 中提出问题:https://github.com/Azure/azure-sdk-for-python/issues

    (我在 MS 的 Python SDK 团队工作)

    【讨论】:

    • 我觉得它作为 BlobService、BlobContainer 和 BlobClient 类令人困惑。 SDK 中的一些简单内容会有所帮助。
    【解决方案2】:

    当我们执行blob.content_settings.content_type="text/html; charset=utf-8" 时,这只会更改您本地计算机上的变量(不会发送更改此值的请求)。 它本质上就像在 Python 程序中设置任何其他变量一样。

    如果您希望此值保留在您的存储帐户中,您必须发送请求。要更改此值,您必须执行以下操作:

    from azure.storage.blob import BlobServiceClient, ContentSettings
    connect_str="connectionString"
    blob_service_client = BlobServiceClient.from_connection_string(connect_str)
    
    # Instantiate a ContainerClient
    container_client = blob_service_client.get_container_client("$web")
    
    # List files in blob folder
    blobs_list = container_client.list_blobs()
    for blob in blobs_list:
        print(blob.content_settings.content_type) # application/octet-stream
        blob.set_http_headers(
        content_settings=ContentSettings(
            content_type="text/html; charset=utf-8"
            )
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2021-08-30
      • 2018-09-14
      • 1970-01-01
      • 2019-04-08
      • 2017-03-17
      • 2020-05-30
      相关资源
      最近更新 更多