让它工作起来真是太辛苦了。我编写了一个云函数来创建 PDF。 PDF 可以包含从云存储下载的图像。所有这些都不可公开访问,并且所有权限都很好。
我能够看到我尝试下载的文件的元数据,但临时下载到文件系统的实际行为是我陷入困境的地方。我得到的是一个空数组:[]。
const functions = require('@google-cloud/functions-framework');
const {Storage} = require('@google-cloud/storage');
functions.http('<my func>', async (req, res) => {
const bucketName = '<my bucket>';
const fileName = 'mytest.jpg';
const cwd = path.join(__dirname, '..');
const destFileName = path.join(cwd, 'tmp/mytest.jpg');
const options = {
destination: destFileName
}
const [meta] = await storage.bucket(bucketName).file(fileName).getMetadata();
console.log(meta) <-- this is populated with the files metadata
const file = await
storage.bucket(bucketName).file(fileName).download(options);
console.log(file) <-- this is always []
....
}
我已经尝试了一些在其他帖子中使用 createReadStream()/createWriteStream() 看到的东西,但也没有骰子,即因为文件是一个空数组。
提前感谢您的一些指导
首先,此代码对于 Cloud Functions 来说不正确:
const cwd = path.join(__dirname, '..');
const destFileName = path.join(cwd, 'tmp/mytest.jpg');
Cloud Functions 中唯一可写的目录是 temp 目录,可在
os.tmpdir()
中找到。它可能是“/tmp”。请参阅:在 Cloud Functions / temp 目录中创建文件
其次,您从 download() 获得的结果是预期的。返回的 DownloadResponse 是一个数组,其中包含一个包含下载内容的可选项目。由于您告诉 SDK 下载到目标文件,我希望该数组为空 - 这样并不是错误。