在nodejs中使用azure blob存储触发器在另一个容器中压缩和写入文件
compress and write a file in another container with azure blob storage trigger in nodejs
我必须进行 api 调用,传递一个压缩文件作为输入。我有一个内部部署的工作示例,但我想在云中移动解决方案。我正在考虑使用 azure blob 存储和 azure 函数触发器。我有以下适用于文件的代码,但我不知道如何在 nodejs
中使用 azure blob 存储和 azure 函数做同样的事情
const zlib = require('zlib');
const fs = require('fs');
const def = zlib.createDeflate();
input = fs.createReadStream('claudio.json')
output = fs.createWriteStream('claudio-def.json')
input.pipe(def).pipe(output)
这段代码以流的形式读取文件,压缩文件并以流的形式写入另一个文件。
我想做的是在我将文件上传到 azure blob 存储容器时读取文件,然后我想压缩它并保存在不同名称的不同容器中,然后制作一个 API调用将保存在另一个容器中的压缩文件作为输入传递
我试过这个代码来压缩传入的文件
const fs = require("fs");
const zlib = require('zlib');
const {Readable, Writable} = require('stream');
module.exports = async function (context, myBlob) {
context.log("JavaScript blob trigger function processed blob \n Blob:", context.bindingData.blobTrigger, "\n Blob Size:", myBlob.length, "Bytes");
// const fin = fs.createReadStream(context.bindingData.blobTrigger);
const def = zlib.createDeflate();
const s = Readable.from(myBlob.toString())
context.log(myBlob);
context.bindings.outputBlob = s.pipe(def)
};
这种方法的问题在于代码的最后一行
context.bindings.outputBlob = s.pipe(def)
我没有压缩文件,如果我使用这个
s.pipe(def).pipe(process.stdout)
我可以读取压缩文件
正如您在上面看到的,我也尝试使用包含上传文件名称和容器名称的 fs.createReadStream(context.bindingData.blobTrigger),但它不起作用
有什么想法吗?
谢谢
这就是解决方案
var input = context.bindings.myBlob;
var inputBuffer = Buffer.from(input);
var deflatedOutput = zlib.deflateSync(inputBuffer);
context.bindings.myOutputBlob = deflatedOutput;
我必须进行 api 调用,传递一个压缩文件作为输入。我有一个内部部署的工作示例,但我想在云中移动解决方案。我正在考虑使用 azure blob 存储和 azure 函数触发器。我有以下适用于文件的代码,但我不知道如何在 nodejs
中使用 azure blob 存储和 azure 函数做同样的事情const zlib = require('zlib');
const fs = require('fs');
const def = zlib.createDeflate();
input = fs.createReadStream('claudio.json')
output = fs.createWriteStream('claudio-def.json')
input.pipe(def).pipe(output)
这段代码以流的形式读取文件,压缩文件并以流的形式写入另一个文件。
我想做的是在我将文件上传到 azure blob 存储容器时读取文件,然后我想压缩它并保存在不同名称的不同容器中,然后制作一个 API调用将保存在另一个容器中的压缩文件作为输入传递
我试过这个代码来压缩传入的文件
const fs = require("fs");
const zlib = require('zlib');
const {Readable, Writable} = require('stream');
module.exports = async function (context, myBlob) {
context.log("JavaScript blob trigger function processed blob \n Blob:", context.bindingData.blobTrigger, "\n Blob Size:", myBlob.length, "Bytes");
// const fin = fs.createReadStream(context.bindingData.blobTrigger);
const def = zlib.createDeflate();
const s = Readable.from(myBlob.toString())
context.log(myBlob);
context.bindings.outputBlob = s.pipe(def)
};
这种方法的问题在于代码的最后一行
context.bindings.outputBlob = s.pipe(def)
我没有压缩文件,如果我使用这个
s.pipe(def).pipe(process.stdout)
我可以读取压缩文件
正如您在上面看到的,我也尝试使用包含上传文件名称和容器名称的 fs.createReadStream(context.bindingData.blobTrigger),但它不起作用
有什么想法吗? 谢谢
这就是解决方案
var input = context.bindings.myBlob;
var inputBuffer = Buffer.from(input);
var deflatedOutput = zlib.deflateSync(inputBuffer);
context.bindings.myOutputBlob = deflatedOutput;