如何通过 API 调用从 azure 容器中分块获取 blob 数据?

问题描述

我正在尝试通过 API 调用从 azure blob 容器中检索数据,它工作正常,但对于 20 或 30 MB 的文件,它需要将近 3-4 分钟才能从 API 获得响应,这从用户的角度来看并不好,有没有办法从 azure 中分块获取数据,以便我们可以向用户显示渐进式数据?下面是我用来获取数据的节点 js 代码片段:

var request = require('request').defaults({ encoding: null });
const fileUrl = "File Url";
request.get(fileUrl,function (error,response,body) {
    if (!error && response.statusCode == 200) {
        const image = body.toString('base64');
        res.status(200).json({ image })
    } else {
        res.status(400).json({})
    }
});

解决方法

请求 Blob 的 Content-Length

blob 的大小(以字节为单位)。对于页 blob,此标头返回与 blob 一起存储的 x-ms-blob-content-length 标头的值。

Get the blob 使用 Range Headers:

范围 可选。仅返回指定范围内 blob 的字节。

第二种格式 bytes=startByte-endByte 可用于使用所有版本(2009-04-14 到最新版本)的请求,以及所有版本的存储模拟器服务。此范围将返回从偏移量 startByte 到 endByte 的字节。例如,要指定包含 blob 前 512 个字节的范围,您可以传入以下任一标头:

范围:字节=0-511