【问题标题】:upload large files to blob storage without saving file locally mean stack将大文件上传到 blob 存储而不在本地保存文件意味着堆栈
【发布时间】:2020-11-12 09:16:01
【问题描述】:

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


    【解决方案1】:

    blog 向您展示如何使用 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 传递给方法。这是代码 m 尝试 var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({ // 频率:10,块大小:大小 }); myReadableStreamBuffer.put(c); blobService.createBlockBlobFromStream(containerName, blobName, myReadableStreamBuffer,10, err => {
    • 错误:'未定义函数 _createBlobFromStream 的必需参数回调''ArgumentNullError'
    • 请尝试使用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); } });
    • 我在编辑回复时出现此错误,您可以接受,谢谢。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2016-08-18
    • 2014-08-23
    • 2016-12-13
    • 2020-02-11
    • 2015-06-16
    相关资源
    最近更新 更多