繁体   English   中英

谷歌云存储节点客户端 ResumableUploadError

[英]Google Cloud Storage node client ResumableUploadError

我们有一个在 GCP 中运行的应用程序,在 Kubernetes 服务中。 后端位于运行节点/高山基础图像的容器内。 我们尝试使用 Google Cloud Storage ( @google-cloud/storage": "~2.0.3" ) 的 nodejs 客户端库将文件更新到我们的存储桶,就像在 github repo 示例中一样:

storage.bucket(bucketName)
                .upload(path.join(sourcePath, filename),
                    {
                        'gzip': true,
                        'metadata': {
                            'cacheControl': 'public, max-age=31536000',
                        },
                    }, (err) => {
                        if (err) {
                            return reject(err);
                        }

                        return resolve(true);
                    });
        });

它适用于小于 5Mb 的文件,但当我获得更大尺寸的文件时,我会收到错误消息:

{“名称”:“ResumableUploadError”}

几次谷歌搜索后,我看到客户端自动切换到可恢复上传。 不幸的是,我找不到任何关于如何使用节点客户端管理这种特殊情况的示例。 我们希望允许最多 50Mb,所以现在有点担心。

好吧,只是让你知道问题是因为我的容器运行节点/高山图像。 alpine 发行版被剥离到最低限度,因此没有~/.config文件夹被google-cloud/storage节点库使用的Configstore库使用。 我不得不进入回购检查代码并在file.ts中看到评论一旦我在容器中添加了文件夹(通过在 Dockerfile 中添加 RUN mkdir ~/.config),一切都开始按预期工作。

或者,您可以在传入的选项中设置resumable: false 。因此完整的代码如下所示:

storage.bucket(bucketName)
                .upload(path.join(sourcePath, filename),
                    {
                        'resumable': false,
                        'gzip': true, 
                        'metadata': {
                            'cacheControl': 'public, max-age=31536000',
                        },
                    }, (err) => {
                        if (err) {
                            return reject(err);
                        }

                        return resolve(true);
                    });
        });

如果您仍然想要可恢复的上传并且不想在 Dockerfile 中创建额外的定制目录,这里是另一种解决方案。

可恢复上传需要可访问的可写目录。 根据操作系统以及您安装@google-cloud/storage 的方式,默认配置路径可能会发生变化。 为确保这始终有效,而无需在 Dockerfile 中创建特定目录,您可以将configPath指定为可写文件。

这是您可以执行的操作的示例。 确保将 configPath 指向一个文件而不是现有目录(否则你会得到Error: EISDIR: illegal operation on a directory, read

gcsBucket.upload(
  `${filePath}`,
  {
    destination: `${filePath}`,
    configPath: `${writableDirectory}/.config`,
    resumable: true
  }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM