我正在使用Node.js,尝试从URL获取图像并将该图像上传到另一个服务,而不将图像保存到磁盘。将文件保存到磁盘并使用fs创建可读流时,下面的代码可以工作。但是,当我在只读文件系统(webtask.io)上作为cron作业执行此操作时,我希望在不将文件临时保存到磁盘的情况下达到相同的结果。那不可能吗?
request(image.Url)
.pipe(
fs
.createWriteStream(image.Id)
.on('finish', () => {
client.assets
.upload('image', fs.createReadStream(image.Id))
.then(imageAsset => {
resolve(imageAsset)
})
})
)
您对不保存文件到磁盘的方法有何建议?上传客户端将使用以下
client.asset.upload(type: 'file' | image', body: File | Blob | Buffer | NodeStream, options = {}): Promise<AssetDocument>
谢谢!
答案 0 :(得分:0)
如何将缓冲区传递给上传功能?由于按照您的声明,它将接受缓冲区。
作为旁注...这将在方法执行期间将其保留在内存中,因此,如果多次调用此方法,则可能会耗尽资源。
request.get(url, function (res) {
var data = [];
res.on('data', function(chunk) {
data.push(chunk);
}).on('end', function() {
var buffer = Buffer.concat(data);
// Pass the buffer
client.asset.upload(type: 'buffer', body: buffer);
});
});
答案 1 :(得分:0)
我尝试了一些各种库,结果发现node-fetch提供了一种返回缓冲区的方法。因此,此代码有效:
fetch(image.Url)
.then(res => res.buffer())
.then(buffer => client.assets
.upload('image', buffer, {filename: image.Id}))
.then(imageAsset => {
resolve(imageAsset)
})