【问题标题】:Trouble uploading file to google cloud storage无法将文件上传到谷歌云存储
【发布时间】: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


【解决方案1】:

正如@Kolban 所说,您应该使用 createWriteStream :

bucketName.file(filename).createWriteStream({resumable: false, gzip: true})

【讨论】:

  • 那个链接帮助了我,我不得不使用fs.createReadStream,谢谢o/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 2018-08-01
  • 2018-07-11
相关资源
最近更新 更多