【问题标题】:Upload large blob to Azure storage container using App service and function app使用应用服务和函数应用将大型 Blob 上传到 Azure 存储容器
【发布时间】:2022-07-03 19:24:56
【问题描述】:

我正在开展一个项目,以允许用户将 blob 上传到我们存储帐户中的 blob 容器中。我使用 Azure App Service 开发了一个简单的 UI(flask),允许用户选择要上传的文件,然后将这些文件上传到 blob 容器。

我最初的设计是 UI -> Python Storage SDK 的 Blob Container:

containerClient.upload_blob(filename, file)

但是我在上传大文件时遇到了 Azure App Service 的超时问题。

所以我用dropzone.js更改了上传UI,并启用了分块上传,以便服务器可以持续接收响应以防止超时。

另外一个问题是上传过程是针对每个块执行的,而 blob 容器只接收我上传的最后一个数据块。 (从文档我知道blob上传会自动使用分块,不知道我们是否可以跟踪上传的进度???如果可以,我可能不需要使用dropzone.js进行上传块)。

我还尝试了另一种方法,即创建 Azure App Function(HTTPS 触发器),然后将 http 触发器发送到该端点以开始 Blob 上传。

for file in files:
    fileToSend = {'file': (f.filename, f.stream, f.content_type, f.headers)}
    r = requests.post('https://myazurefunctionapp.azurewebsites.net/api/funcName', files=fileToSend)

在azure函数中,我使用Python Storage SDK连接容器,然后上传blob

container = ContainerClient.from_connection_string(conn_str, container_name)
for k, f in req.files.items():
    container.upload_blob(f.filename, f)

但我注意到该函数是由一块块(请求)触发的,我也最终只接收到容器中的最后一块数据。

我想知道更好的工作流程是什么?或者如果有任何方法可以确保上传完成(在 azure 函数中),然后开始上传到 blob 容器。

非常感谢,

【问题讨论】:

    标签: python flask azure-functions azure-web-app-service azure-blob-storage


    【解决方案1】:

    • 存储客户端默认为最大 32 MB 的单个块上传。当块 Blob 上传大于 ‘SingleBlobUploadThresholdInBytes’ 属性中的值时,存储客户端会将文件分成最大允许大小的块并尝试上传。由于您尝试上传的块 blob 大小大于 32 MB,因此它会引发异常并将文件分成允许的较小块。此外,您可能没有使用正确的与资源交互的“Blob 服务客户端”,即存储帐户、blob 存储容器和 blob

    以下是客户端对象创建代码示例,该代码需要存储帐户的 blob 服务帐户 URL 和允许您访问存储帐户的凭据:-

     from azure.storage.blob import BlobServiceClient
     service = BlobServiceClient(account_url="https://<my-storage-account-name>.blob.core.windows.net/", credential=credential)
    

    • 因此,类似地,当您在 python 中使用上述代码创建用于与存储帐户交互的 blob 服务客户端时,请参阅以下文档链接,该链接详细描述了如何开发 python代码将其与 blob 存储集成以存储大量非结构化数据,例如文本或二进制数据

    https://docs.microsoft.com/en-us/python/api/overview/azure/storage-blob-readme?view=azure-python

    您可以在您的应用服务或函数中部署此代码,并相应地设置触发器以从存储帐户上传和下载 Blob。它还描述了如何为此过程配置身份验证以确保正确的用户和文件被授予访问权限

    有关如何在 Azure 中配置 blob 触发函数以在任何用户通过它发起任何事务时与存储帐户进行各种交互的详细信息,请参阅文档链接 .

    https://docs.microsoft.com/en-us/azure/storage/blobs/blob-upload-function-trigger?tabs=azure-portal

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 2020-09-21
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2016-08-23
      • 2022-01-18
      相关资源
      最近更新 更多