[英]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.