使用Node将上传的文件流式传输到Azure Blob存储

查理·布朗

通过使用Express with Node,我可以成功上传文件,并通过以下代码块将其传递到Azure存储。

app.get('/upload', function (req, res) {
    res.send(
    '<form action="/upload" method="post" enctype="multipart/form-data">' +
    '<input type="file" name="snapshot" />' +
    '<input type="submit" value="Upload" />' +
    '</form>'
    );
});

app.post('/upload', function (req, res) {
    var path = req.files.snapshot.path;
    var bs= azure.createBlobService();
    bs.createBlockBlobFromFile('c', 'test.png', path, function (error) { });
    res.send("OK");
});

这很好用,但是Express创建了一个临时文件并先存储图像,然后将其从文件上传到Azure。这似乎是该过程中效率低下且不必要的步骤,而我最终不得不管理临时文件目录的清理。

我应该能够使用blobService.createBlockBlobFromStreamAzure SDK中方法将文件直接流式传输到Azure存储,但是我对Node或Express不够熟悉,无法理解如何访问流数据。

app.post('/upload', function (req, res) {

    var stream = /// WHAT GOES HERE ?? ///

    var bs= azure.createBlobService();
    bs.createBlockBlobFromStream('c', 'test.png', stream, function (error) { });
    res.send("OK");
});

我发现以下博客表明可能有一种方法,当然Express也在抓取流数据并将其解析并保存到文件系统中。http://blog.valeryjacobs.com/index.php/streaming-media-from-url-to-blob-storage/

vjacobs代码实际上是从另一个站点下载文件并将该流传递到Azure,因此我不确定它是否可以适应我的情况。

如何使用Node访问上传的文件流并将其直接传递到Azure?

查理·布朗

解决方案(基于与@danielepolencic的讨论)

使用Multiparty(npm install multiparty),这是Formidable的一个分支,如果我们从Express禁用bodyparser()中间件,则可以访问多部分数据(有关更多信息,请参见他们的注意事项)。与Formidable不同,除非您告知,否则Multiparty不会将文件流传输到磁盘。

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

            var size = part.byteCount - part.byteOffset;
            var name = part.filename;

            blobService.createBlockBlobFromStream('c', name, part, size, function(error) {
                if (error) {
                    res.send({ Grrr: error });
                }
            });
        } else {
            form.handlePart(part);
        }
    });
    form.parse(req);
    res.send('OK');
});

@danielepolencic的道具,以帮助您找到解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Flask API将上传的文件流式传输到MinIO存储

来自分类Dev

将“Azure Blob 存储”文件 URL 流式传输到 Amazon S3 存储桶

来自分类Dev

从Azure Blob存储流式传输视频

来自分类Dev

如何通过Azure网站上的Node.js应用程序将大文件的上传流通过管道传输到Azure Blob存储?

来自分类Dev

上传存储在Azure Blob存储中的文件

来自分类Dev

如何在不使用python写入文件的情况下将文件分块传输到Azure Blob存储

来自分类Dev

Azure Blob存储大文件上传

来自分类Dev

Azure Blob存储授权

来自分类Dev

Azure存储:Blob与表

来自分类Dev

Azure Blob 存储

来自分类Dev

使用Azure Blob存储中的.Net Core API异步流式传输视频

来自分类Dev

将上传的文件流式传输到HTTP请求

来自分类Dev

使用Https的Azure Blob存储

来自分类Dev

使用 SQLAlchemy 将 BLOB 流式传输到 MySQL

来自分类Dev

如何在不将文件保存到本地存储的情况下将对象传输到Azure Blob存储?

来自分类Dev

Azure存储Blob:在Blob级别设置CORS?

来自分类Dev

Azure Blob存储列表容器和Blob

来自分类Dev

Azure存储Blob:在Blob级别设置CORS?

来自分类Dev

找不到Azure Blob存储

来自分类Dev

从Azure Blob存储访问图像

来自分类Dev

Azure Blob存储:地理复制

来自分类Dev

Ruby Azure Blob存储:“ RequestBodyTooLarge”

来自分类Dev

找不到Azure Blob存储

来自分类Dev

来自 Android 的 Azure blob 存储

来自分类Dev

TransactionScope 内的 Azure blob 存储上传

来自分类Dev

Azure Blob存储-上传Blob后如何获取Blob存储ID?

来自分类Dev

手动将文件上传到Azure Blob存储

来自分类Dev

从Linux上传Azure Blob存储中的多个文件

来自分类Dev

Azure块blob存储连续上传相同文件失败

Related 相关文章

热门标签

归档