【问题标题】:Copy file from file storage to blob storage using python使用python将文件从文件存储复制到blob存储
【发布时间】:2021-11-22 18:59:30
【问题描述】:

我正在尝试使用 python 将图像从文件存储复制到 blob 存储,但无法使其正常工作。我基于这个 node.js 示例Copy Azure File Share to Blob with node.js。我在本地运行 python 代码时遇到的异常如下所示。

azure.core.exceptions.ResourceNotFoundError:此请求无权使用此资源类型执行此操作。

这是python代码的sn-p。

sas_token = generate_account_sas(
    account_name=account_name,
    account_key=account_key,
    resource_types=ResourceTypes(service=True),
    permission=AccountSasPermissions(read=True),
    expiry=datetime.utcnow() + timedelta(hours=1)
)


blob_service_client = BlobServiceClient(account_url=blob_uri, credential=account_key)
container_client = blob_service_client.get_container_client("event")


share_directory_client = ShareDirectoryClient.from_connection_string(conn_str=conn_string, 
                                                        share_name="test-share",
                                                        directory_path="")
dir_list = list(share_directory_client.list_directories_and_files())
logging.info(f"list directories and files : {dir_list}")

for item in dir_list:
    if item['is_directory']:
        pass
    else:
        fileClient = share_directory_client.get_file_client(item['name'])
        source_url = fileClient.url + "?" + sas_token
        logging.info(f"{source_url}")    
        container_client.get_blob_client(item['name']).start_copy_from_url(source_url)

使用 SAS 令牌创建的源 URL 如下所示。

https://<STORAGE_NAME>.file.core.windows.net/test-share/test.jpg?se=2021-10-01T05%3A46%3A22Z&sp=r&sv=2020-10-02&ss=f&srt=s&sig=<signature>

【问题讨论】:

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


    【解决方案1】:

    您收到此错误的原因是您的 SAS 令牌中的资源类型不正确(srt 值)。

    由于您的代码将文件复制到 blob 存储,因此您需要将 object 作为允许的资源类型。请参阅此link 了解有关资源类型的更多信息。

    您的代码如下所示:

    sas_token = generate_account_sas(
        account_name=account_name,
        account_key=account_key,
        resource_types=ResourceTypes(object=True),
        permission=AccountSasPermissions(read=True),
        expiry=datetime.utcnow() + timedelta(hours=1)
    )
    

    您的 SAS URL 应类似于:

    https://<STORAGE_NAME>.file.core.windows.net/test-share/test.jpg?se=2021-10-01T05%3A46%3A22Z&sp=r&sv=2020-10-02&ss=f&srt=o&sig=<signature>
    

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 2020-08-18
      • 2016-11-25
      • 2017-08-18
      • 2023-01-20
      • 2020-03-23
      • 2022-10-04
      • 2022-09-28
      • 2020-02-11
      相关资源
      最近更新 更多