【问题标题】:How to upload files to azure blob storage?如何将文件上传到 Azure Blob 存储?
【发布时间】:2019-08-13 11:22:57
【问题描述】:

我需要每天从本地系统将文件上传到 azure blob 容器。我使用 azcopy 和 sas 来做这件事。 但我遇到的是容器的 SAS 在每次刷新时都会不断变化。 那么有没有更好的方法可以使用 python 或 azcopy 上传文件。 或者有什么方法可以在没有登录的情况下从天蓝色获取 SAS 令牌并将该 SAS 令牌传递给 azcopy 命令? 截至目前,我从 azcopy 使用此命令

.\azcopy "Sourcefilepath" "Destblobpath?SAS_Token" --recurcive=true

每天我都应该登录到 azure 获取 SAS 令牌并传递上述命令。 我尝试了 .\azcopy 登录,我登录成功,但我无法发送文件

.\azcopy "Sourcepath" "Destpath"

不知道自己哪里做错了。

【问题讨论】:

  • 不确定我是否理解:您为什么每天登录(以及您登录什么?)以获得 SAS?每天都是同一个容器吗?如果是这样,为什么不直接生成一个使用寿命更长的 SAS?
  • 我每天都将文件上传到 azure blob。我正在通过 azure 门户并找到容器并将文件上传到它来做到这一点。相反,我想使用 azcopy 发送文件。我面临的问题是每次刷新或我不知道的一些超时时,sas 都会不断变化。那么如何使用 sas 或不使用 sas 令牌来实现将文件从本地上传到 blob 的任务。您提到了获得具有生命周期的扩展令牌,我怎样才能得到这个?是的,容器是一样的

标签: python azure azure-blob-storage azcopy


【解决方案1】:

您看到的 SAS 问题实际上正在按预期工作。 SAS 有一个到期日期,您可以随时撤销。因此,您将需要在新的可用时立即使用它。

我建议使用 python SDK,因为它使用存储密钥和帐户名称,除非轮换密钥,否则不会过期。我在 python SDK 中编写了一些工具/示例,它们执行所有操作:列出、上传和删除:https://github.com/adamsmith0016/Azure-storage

随意克隆和重用任何代码。

【讨论】:

  • 感谢您的回答。您的代码是否会上传指定文件夹中的所有文件?我在本地文件夹中有大约 6 个文件,我想上传所有文件,而不提示是或否!我只需要删除一个包含昨天日期时间戳的特定文件,例如 filename-24MAR2019。我可以在不需要用户输入的情况下实现这一切吗?我知道这是一个愚蠢的问题!
  • 您绝对可以通过编辑脚本在没有提示的情况下做到这一点:),您还可以添加精确的正则表达式来查找特定的文件扩展名等。
【解决方案2】:

如果您使用的是 python,我建议您使用 azure python sdk 进行上传。您可以从这里的示例中看到更多信息...

https://github.com/Azure-Samples/storage-blobs-python-quickstart/blob/master/example.py

与您的 azure blob 存储帐户连接可以像这样快(来自快速入门文档:https://docs.microsoft.com/en-us/python/api/overview/azure/storage?view=azure-python)。只需输入一些逻辑以递归方式遍历目录并上传每个文件。

首先确保 pip 安装所需的软件包,然后从门户获取您的帐户名称(blob 存储名称)和访问密钥...插入它们就可以了。

pip install azure-storage-blob azure-mgmt-storage

那就在这里写一些python代码吧……

from azure.storage.blob import BlockBlobService, PublicAccess

blob_service = BlockBlobService('[your account name]','[your access key]')

blob_service.create_container(
    'mycontainername',
    public_access=PublicAccess.Blob
)

blob_service.create_blob_from_bytes(
    'mycontainername',
    'myblobname',
    b'hello from my python file'
)

print(blob_service.make_blob_url('mycontainername', 'myblobname'))

这应该会让你很快朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 2017-08-19
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多