Logic App使用HTTP请求分块迁移Azure Blob到SharePoint大文件报错如何解决
问题根因
你遇到的104857600字节错误对应的是Logic App HTTP动作单请求响应的默认100MB缓冲区硬限制,之前的配置全部存在适用场景错误,所以没有生效:
content-transfer-allow-chunking请求头是用于请求端分块上传时告知接收端的标识,和GET请求拉取Blob的分块下载场景完全无关,添加后不会有任何作用。- 你配置的
Range: bytes=255-仅会跳过前256字节拉取剩余所有内容,500MB的剩余负载仍然远大于100MB缓冲区上限,自然会触发报错。 - Logic App HTTP动作的分页设置仅对响应中返回
@odata.nextLink类分页标识的API生效,Azure Blob存储的GET Blob接口不会返回这类分页参数,开启后完全不生效。
可行解决方案
你需要手动实现循环分块拉取逻辑,具体步骤如下:
- 先发送一次
HEAD请求调用Blob存储接口,从响应头Content-Length中获取目标Blob的总大小,存入变量totalBlobSize - 初始化两个变量:
currentOffset = 0(当前拉取偏移量),chunkSize = 52428800(单块大小设为50MB,小于100MB缓冲区限制即可,建议为4MB整数倍方便后续校验) - 添加
Do Until循环,终止条件设为currentOffset >= totalBlobSize - 循环内的HTTP GET请求的
Range头设置为:bytes=@{variables('currentOffset')}-@{min(variables('currentOffset') + variables('chunkSize') - 1, variables('totalBlobSize') - 1)} - 每拉取完一个分块,将分块内容追加到SharePoint目标文件中,再更新
currentOffset = variables('currentOffset') + variables('chunkSize')即可
内容的提问来源于stack exchange,提问作者K_OFLYNN
相关产品推荐
相关产品推荐

