Azure函数通过http触发请求分块读取大文件
Posted
技术标签:
【中文标题】Azure函数通过http触发请求分块读取大文件【英文标题】:Azure Function to read large file in chunks through http trigger request 【发布时间】:2021-09-23 08:21:12 【问题描述】:我在 Azure 函数中有一个 API,它使用 Http 触发器接收数据并将其发送到本地应用程序。我们有 UI 前端,用户可以在其中上传大文件大小(无限制),并将数据以块的形式发送到 API。
我知道功能 App 的限制是 100MB,我还看到处理大文件大小的建议是使用 Blob 存储。但是对于同步过程,我们希望通过API来实现(避免在中间过程中将数据存储在blob存储中)。
有没有一种方法可以通过 Http 触发请求以块的形式接收数据?例如:UI -> 分块发送数据 -> API(使用 HttpTrigger)分块读取数据并分块发送数据 -> 本地。
例如: 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger 日志)
如果发送者已经在块中流式传输数据,我如何从块中读取数据? 如果我读到类似下面的内容,只要有效负载
_bufferSize = 1048576;
byte[] datapayLoad;
while (dataRead >0)
dataRead = req.Body.Read(datapayLoad, 0, _bufferSize);
....
感谢您在这方面的帮助。
【问题讨论】:
你找到解决方案了吗?我也有同样的要求 是的。我已经使它完全异步,例如:UI -> 上传到 Blob 存储,向 API 发送事件。然后 API 将该事件转发到存储队列(这是避免 http 会话空闲超时所必需的)。还有另一个 API 将从存储队列中读取并以块的形式下载 blob 并以块的形式写入本地。 【参考方案1】:我认为一种解决方案是在您的 UI/应用程序和 Azure Function API 之间放置一个 Azure 事件中心。这样您就可以捕获发送大量数据的每个事件并正确触发您的函数。
【讨论】:
【参考方案2】:是否需要分块读取数据?如果发送者可以写入文件(以块的形式或一次)并在文件完全写入后发布事件,那就太好了。您的函数可以触发该事件并直接从 blob 存储中读取文件。
显式地读取块可能会引入不必要的复杂性,并且从长远来看可能并不可靠。只是一个建议。
【讨论】:
以上是关于Azure函数通过http触发请求分块读取大文件的主要内容,如果未能解决你的问题,请参考以下文章