我需要编写一个脚本,从Azure blob storage获取文件并通过github's API将它们推送到github存储库。
azure-storage package提供了方法blobService.getBlobToStream
,它希望第三个参数成为一个流,fs.createWriteStream('output.txt')
作为示例提供
然而,要上传到github,需要提供该文件的base64编码内容。我使用base64-stream package
我已经检查过每个步骤是否有效,即我先从azure下载文件,然后将其保存在磁盘上,然后从磁盘读取并对其进行编码,然后上传到github
// download first
blobService.getBlobToStream('...', '...', fs.createWriteStream('out'), ...
var b64file = '';
fs.createReadStream('out')
.pipe(require('base64-stream').encode())
.on('data', function (chunk) {
b64file += chunk;
})
.on('end', function () {
// upload to github
});
如果没有将文件保存在磁盘上的间歇步骤,我可以这样做吗?我可以将blobService.getBlobToStream
作为可写的流传递给.pipe()
,但是require('stream').Duplex
可读?
来自node'js docs似乎var Duplex = require('stream').Duplex;
var wr_stream = new Duplex;
var b64file = '';
wr_stream.createReadStream('out')
.pipe(require('base64-stream').encode())
.on('data', function (chunk) {
b64file += chunk;
})
.on('end', function () {
// upload to github
});
// now I can download
blobService.getBlobToStream('...', '...', wr_stream, ...
正是我所寻找的,但我无法使其发挥作用,我发现的例子也不是很有启发性。如果我只是像
events.js:141
throw er; // Unhandled 'error' event
^
Error: not implemented
at Duplex.Readable._read (_stream_readable.js:449:22)
at Duplex.Readable.read (_stream_readable.js:328:10)
at resume_ (_stream_readable.js:718:12)
at nextTickCallbackWith2Args (node.js:437:9)
at process._tickCallback (node.js:351:17)
at Function.Module.runMain (module.js:443:11)
at startup (node.js:134:18)
at node.js:962:3
我得到例外
(?i)Win\w*\s*Server\s*(2008)(?!\sR2).*?$
答案 0 :(得分:0)
由于您周围有流,因此无需创建任何自定义流。管道他们:
const { Base64Encode } = require('base64-stream')
const { WriteStream } = require('fs')
const blobService = azure.createBlobService()
const writer = new WriteStream('output.txt')
const encoder = new Base64Encode()
encoder.pipe(writer)
blobService('...', '...', encoder)