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