我想知道是否有一些功能可以指定azure blob流的最大长度,这样只有指定的大小才能上传,其余的都会被丢弃,即文件会被截断。
问题
我需要为文件指定最大大小,比如50或60 Mb,如果大小最大,我希望文件被截断。(文件可以是大型日志文件或视频文件)
我有以下代码在工作(我使用表单的多方和azure的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
被指定为低于29Mb(在示例中为25Mb),则当我上传例如80Mb的视频时,我得到期望的结果,即只有25Mb的文件被上传,即视频文件被截断。
但如果我指定大小大于29Mb,那么streamLength
就无关紧要了,整个文件都在上传中。
我试着查看azure-storage
,发现如果streamLength
被指定得比DEFAULT_SINGLE_BLOB_PUT_THRESHOLD_IN_BYTES: 32* 1024 * 1024
多,那么库会尝试通过将blob分隔成块来将其放入块中,如果它低于DEFAULT_SINGLE_BLOB_PUT_THRESHOLD_IN_BYTES
,那么它会尝试同时放入整个块。
是否有实现此功能的方法
编辑
测试上传80 Mb文件
streamLength=28 Mb(<29 Mb):28 Mb的文件上传
streamLength=32Mb(>=32Mb):80 Mb的文件上传
感谢您的举报,给您带来的不便,我们深表歉意。我们已经确认这是Azure存储客户端库中的一个错误。