我正在尝试为loopback-component-storage创建一个Google驱动器提供程序。环回提供程序上载方法应返回可写流,但是google drive api希望上载可读的流。
只有可读流可以通过管道传输到可写流,但反之则不行。
我尝试过用ough2,它应该只代理所有数据,但是它的行为就像schroedingers流一样:有时候它起作用,有时候,当我看着它时,通过监听事件它却不能起作用。如果失败,则会抛出steam.push() after EOF
。
const {google} = require('googleapis');
const through = require('through2');
...
const drive = google.drive({
version: 'v3'
});
...
upload(options) {
const containerName = options.container;
const fileName = options.remote;
const proxyStream = through();
this.findContainerByName(containerName, (err, container) => {
const media = {
body: proxyStream,
mimeType: options.contentType,
};
const fileMetaData = {
name: fileName,
parents: [container.id],
};
drive.files.create({
resource: fileMetaData,
media,
});
});
return proxyStream;
}
这似乎是由异步findContainerByName
函数引起的计时问题。由于回送api的工作原理,我需要向驱动器api索要按名称指定的容器ID。我缓存了响应,但第一次也必须运行。
我可以以某种方式延迟流响应的返回,还是需要两个流才能缓冲可写流,直到可读流准备就绪?