Node.js 将大文件上载到blob存储,而不在本地保存文件

Node.js 将大文件上载到blob存储,而不在本地保存文件,node.js,azure,azure-blob-storage,Node.js,Azure,Azure Blob Storage,目前,我可以通过在本地保存文件将文件上载到blob存储。但我想将文件直接流式传输到存储器。因为我对文件系统完全陌生,所以我无法使用createReadStrem(filepath)来实现它,因为它需要文件路径,在搜索时,我发现从前端获取路径是不可能的。我正在将文件分成若干块并写入流。如果有人能帮我做这件事 Headers: X-Chunk-Id: 0 X-Content-Id: a997d61859d6d3814d5f3f4a.. x-Content-Length: 19 payload: f

目前,我可以通过在本地保存文件将文件上载到blob存储。但我想将文件直接流式传输到存储器。因为我对文件系统完全陌生,所以我无法使用createReadStrem(filepath)来实现它,因为它需要文件路径,在搜索时,我发现从前端获取路径是不可能的。我正在将文件分成若干块并写入流。如果有人能帮我做这件事

Headers:
X-Chunk-Id: 0
X-Content-Id: a997d61859d6d3814d5f3f4a..
x-Content-Length: 19

payload:
fdfdfgytuujftyeeyjh    // hi.txt dummyfiledata it can be zip file also
原料药

const fs=require(“fs”);
函数uploadToBlob(请求、响应){
const chunkComplete=file.pushChunk(chunkId、chunk、chunkSize);
const size=file.getChunkLength(chunkId);
if(file.isCompleted()){
var userrole=file.userrole;
var projectId=file.id;
var projectname=file.path;
var fileName=file.name;
var blobName=projectname+'/'+file.name;
var sourceFilePath=uu dirname+'/uploads/'+file.name;
const fstream=fs.createReadStrem(sourceFilePath);
让chunks=file.getContent();
for(设j=0;j{
//createBlockBlobFromLocalfile(文件保存到blob存储)
//相反,我想在这里使用bs.createBlockBlobFromstream(),直接流式传输到blob,而无需本地保存
}
}
}
这演示了如何使用Node.js将文件流式传输到Azure Blob存储

app.post('/upload', function (req, res) {
    var blobService = azure.createBlobService();
    var form = new multiparty.Form();

    form.on('part', function(part) {
        if (part.filename) {
            var filename = part.filename;
            var size = part.byteCount;

            var onError = function(error) {
                if (error) {
                    res.send({ grrr: error });
                }
            };
            blobService.createBlockBlobFromStream('container', filename, part, size, onError);
        } else {
            form.handlePart(part);
        }
    });

    form.parse(req);
    res.send("SWEET");
});
使用Readable方法将缓冲区转换为流。如下所示:

const stream = Readable.from(buffer); 
blobService.createBlockBlobFromStream('container-name', 'filename', stream, buffer.byteLength, function(error, response) {         
    if (error) {             
        console.log('Error!');             
        console.log(error);         
    } else {             
        console.log('Blob uploaded successfully!');             
        console.log(response);         
    }     
});

我在缓冲区中有数据,所以我想将其转换为流,并将arg传递给方法。下面是我尝试var myReadableStreamBuffer=newstreambuffers.ReadableStreamBuffer({//frequency:10,chunkSize:size});myReadableStreamBuffer.put(c);blobService.createBlockBlobFromStream的代码(containerName,blobName,myReadableStreamBuffer,10,err=>{error:“未定义函数_createBlobFromStream的必需参数回调”“ArgumentNullError”“请尝试使用
Readable
方法将缓冲区转换为流。如下所示:
const stream=Readable.from(buffer);BlobsService.createBlobFromStream('container-name','filename',stream,buffer.byteLength,function(error,response){if(error){console.log('error!');console.log(error);}else{console.log('Blob上传成功!');console.log(response);});
我用这个错误编辑我的回复,您可以接受,谢谢。
const stream = Readable.from(buffer); 
blobService.createBlockBlobFromStream('container-name', 'filename', stream, buffer.byteLength, function(error, response) {         
    if (error) {             
        console.log('Error!');             
        console.log(error);         
    } else {             
        console.log('Blob uploaded successfully!');             
        console.log(response);         
    }     
});