【发布时间】:2020-01-21 16:10:00
【问题描述】:
我在尝试将文件上传到 Google Cloud Storage 时遇到问题。我收到错误ENOENT: no such file or directory, stat 'file.extension'。我当前的实现如下所示:
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
const bucketName = 'bucket-name';
exports.uploadFileGCP = async (file, anchorID) => {
const { filename, mimetype, encoding, createReadStream } = await file
await storage.bucket(bucketName).upload(filename, {
destination: `anchor/${anchorID}/` + filename,
predefinedAcl: 'publicRead',
metadata: {
cacheControl: 'no-cache'
},
});
console.log(`${filename} uploaded to ${bucketName}`)
}
查看文档,upload 部分中的 filename 似乎需要本地计算机上文件的路径。我似乎找不到可以在不使用本地路径的情况下上传文件的解决方案。有没有办法做到这一点?
这是文件通过的 GraphQL 解析器的代码:
async function uploadFile(parent, args, ctx, info) {
const google = await uploadFileGCP(args.file, args.anchorID);
console.log(google)
...
}
我觉得我遗漏了一些明显的东西,但无法完全弄清楚发生了什么。感谢您对此事的任何帮助。
【问题讨论】:
-
你能澄清一下问题吗?您是否有执行 GCS 上传的应用程序的本地文件?您希望从哪里获取要上传的文件数据?
-
我目前正在尝试通过邮递员上传,方法是在本地计算机上选择一个文件并尝试将其发送到谷歌存储。最终,这个实现将被插入到我公司的 cv 应用程序中,他们将在其中发送文件数据以存储在云中。这些文件不会存储在应用程序本身中。基本上,它需要是一个动态解决方案,其中文件可以来自多个位置。
-
我认为您想使用以下 API 将数据流式传输到 GCS 对象(文件)。见..googleapis.dev/nodejs/storage/latest/…
-
嘿@seanulus,正如 Kolban 所说,使用 createWriteStream:
bucketName.file(filename).createWriteStream({resumable: false, gzip: true}) -
@Methkal Khalawi @Kolban 谢谢。我最终能够使用该方法上传。我很好奇是否有一种方法可以在上传时在存储桶中创建文件系统,类似于 AWS。示例
anchor/id/file。如果您碰巧知道这样做的方法,我将不胜感激。
标签: node.js google-cloud-platform graphql google-cloud-storage