使用 python 将文件从文件存储复制到 blob 存储
Copy file from file storage to blob storage using python
我正在尝试使用 python 将图像从文件存储复制到 blob 存储,但无法使其工作。我基于这个 node.js 示例 。 运行 python 本地代码时出现的异常如下所示。
azure.core.exceptions.ResourceNotFoundError: This request is not authorized to perform this operation using this resource type.
这是 python 代码的片段。
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>
您收到此错误的原因是您的 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>
我正在尝试使用 python 将图像从文件存储复制到 blob 存储,但无法使其工作。我基于这个 node.js 示例
azure.core.exceptions.ResourceNotFoundError: This request is not authorized to perform this operation using this resource type.
这是 python 代码的片段。
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>
您收到此错误的原因是您的 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>