无法上传文件到生产中的谷歌云存储
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法上传文件到生产中的谷歌云存储相关的知识,希望对你有一定的参考价值。
我正在按照此文档将文件上传到GCS。 Setting Up Authentication for Server to Server Production Applications
它在本地工作但在生产中我得到这个错误:
发布https://www.googleapis.com/upload/storage/v1/b/[bucket-name]/o?alt=json&prettyPrint=false&projection=full&uploadType=multipart:x509:无法加载系统根目录,也没有提供根目录。
func UploadIMG(ctx *context.Context, file []byte, fileName string) error {
storageClient, err := storage.NewClient(*ctx)
if err != nil {
log.Fatal(err)
}
w := storageClient.Bucket(bucketName).Object(fileName).NewWriter(*ctx)
if _, err := w.Write(file); err != nil {return err}
if err := w.Close(); err != nil {return err}
oauthClient, err := google.DefaultClient(*ctx, cloudkms.CloudPlatformScope)
if err != nil {
log.Fatal(err)
}
kmsService, err := cloudkms.New(oauthClient)
if err != nil {
log.Fatal(err)
}
_ = kmsService
return nil
}
您是否真的继续使用链接的教程,确保您拥有正确的凭据?
错误本身可能与证书相关。当它尝试执行请求时,它会在底层系统上查找根证书,但无法找到它们或打开它们。例如,在Ubuntu上,它们应该在/ usr / share / ca-certificates和/或/ etc / ssl / certs下。确保您的证书具有正确的权限,以便能够执行您想要的请求。
正如伙计们在他们的回答中所说,这与我在dockerFile中缺少证书颁发机构有关。
就我而言,在阿尔卑斯山,已经有一个名为ca-certificates的软件包实用程序,它附带了预安装的证书。只需要将以下命令添加到我的docker中。
RUN apk --no-cache add ca-certificates
对于任何谷歌API,您将需要一个信任的根CA.
不确定您的生产环境,但如果您使用Docker,请将此行添加到您的Dockerfile
:
COPY /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
来自,说一个Linux
构建,你可以看到命令go
将寻找系统根信任文件:
https://golang.org/src/crypto/x509/root_linux.go
"/etc/ssl/certs/ca-certificates.crt", // Debian/Ubuntu/Gentoo etc.
"/etc/pki/tls/certs/ca-bundle.crt", // Fedora/RHEL 6
"/etc/ssl/ca-bundle.pem", // OpenSUSE
"/etc/pki/tls/cacert.pem", // OpenELEC
"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7
如果你的生产(linux)版本中没有这些目录,那么go
将没有系统根信任,你将得到你看到的错误。
以上是关于无法上传文件到生产中的谷歌云存储的主要内容,如果未能解决你的问题,请参考以下文章