【发布时间】: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