node.js - 定义 Azure blob 流的大小限制,即截断文件

标签 node.js azure stream azure-blob-storage

我想知道是否有一些功能可用于指定 azure blob 流的最大长度,以便仅上传指定的大小并丢弃其余部分,即文件被截断。

问题

我的需要是指定文件的最大大小,例如 50 或 60 Mb,并且我希望文件在大小达到最大值时被截断。 (文件可以是大型日志文件或视频文件)

我有以下代码正在运行(我使用 multiparty 作为表单,使用 azure-storage Node 包作为 azure)

// form.on is from multiparty

form.on('part', function(part) {
     var streamLength = 25 * 1024 * 1024; // part.byteCount
     if (part.filename) {
        form.on('part', function(part) {
             if (part.filename) {
                blobService.createBlockBlobFromStream(container,
                        blobName, part, streamLength, 
                        function(err, blobContent, blob) {
                     if (err) {
                        // do sth with error
                     }
                     return blobContent;
                 });
             } else {
                    form.handlePart(part);
             }
        });
     } else {
        form.handlePart(part);
     }
});

场景:

如果将 streamLength 指定为低于 29 Mb(例如 25 Mb),那么当我上传 80 Mb 的视频时,我会得到所需的结果,即仅上传 25 Mb 的文件,即视频文件被截断。

但是,如果我指定大小大于 29 Mb,则 streamLength 并不重要,整个文件都会被上传。

我尝试查看azure-storage,发现如果指定的streamLength大于DEFAULT_SINGLE_BLOB_PUT_THRESHOLD_IN_BYTES: 32* 1024 * 1024,则库会尝试通过将 blob 分成 block 来将它们分成 block ,如果它低于 DEFAULT_SINGLE_BLOB_PUT_THRESHOLD_IN_BYTES,那么它会尝试一次放入整个 block 。

有办法实现这个功能吗?

编辑

测试上传 80 Mb 文件

streamLength = 28 Mb (< 29 Mb) : 28 Mb of file gets uploaded

streamLength = 32 Mb (>= 32 Mb): 80 Mb of file gets uploaded

最佳答案

感谢您报告此事,对于给您带来的不便,我们深表歉意。我们已确认这是 Azure 存储客户端库中的错误。

关于node.js - 定义 Azure blob 流的大小限制,即截断文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841688/

相关文章:

stream - 如何从一个 io.Reader 获得多个消费者?

java - 将 Vaadin7 StreamResource 保存到文件

ios - NSStream 不提供任何数据

azure - 将团队中的聊天机器人从一个 Azure 订阅移动到另一订阅

azure - 如何将用户从 Azure Active Directory 引入 Azure Active Directory B2C

php - Base64 解码在 Node 中的工作方式与在 php、perl 或 python 中不同

javascript - Express + bodyParser.json() + Postman,req.body为空

angularjs - “ng”不被识别为内部或外部命令、可操作程序或批处理文件。 (平均堆栈)

node.js - Redis Node : Ready check failed: NOAUTH Authentication required

c# - 设置 Azure 存储操作的超时