将大文件上传到blob存储,而不在本地保存文件意味着堆栈



目前我可以通过在本地保存文件来将文件上传到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

API

const fs = require("fs");
function uploadToBlob(request, response) {
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 = __dirname + '/uploads/' + file.name;
const fstream = fs.createReadStrem(sourceFilePath);
let chunks = file.getContent(); 
for (let j = 0; j < chunks.length; j++)
{
fstream.write(chunks[j]);
}
fstream.end();
delete fileStorage[fileId];
fstream.on("finish", () => {
// bs.createBlockBlobFromLocalfile( file gets saved to blob storage)
//Instead i want to use  bs.createBlockBlobFromstream() here and stream directly to blob without saving locally
}
}
}

此博客向您展示如何使用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);         
}     
});

最新更新