为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 将文件写入 Google App Engine Storage

使用 Go 将文件写入 Google App Engine Storage

Go
HUX布斯 2021-09-20 10:46:10
我正在使用http://godoc.org/google.golang.org/cloud/storage#Writer将文件写入 GAE 存储。io.Copy只要我尝试复制的文件大小小于 10MB,使用就会返回成功的结果。如果文件大于 10MB,我会io.Copy成功退出并写入字节数,但在我的存储桶中找不到该文件。我在文档中找不到任何指示,因此希望获得一些社区反馈,了解他们是如何做到这一点的。这是我的代码片段:func (s *GoogleStorage) StoreReader(r io.ReadCloser) error {  defer r.Close()  wc := storage.NewWriter(s.Context, s.Bucket, s.BackupName)  wc.ContentType = "text/plain"  wc.ACL = []storage.ACLRule{{storage.AllUsers, storage.RoleReader}}  defer wc.Close()  count, err := io.Copy(wc, r)  if err != nil {    s.app.Infof("Error doing copy:", err)  }  s.app.Infof("Bytes written: %d", count)  return err}我更新了上面的代码以返回更多信息:func (s *GoogleStorage) StoreReader(r io.ReadCloser) error {  defer r.Close()  wc := storage.NewWriter(s.Context, s.Bucket, s.BackupName)  wc.ContentType = "text/plain"  wc.ACL = []storage.ACLRule{{storage.AllUsers, storage.RoleReader}}  count, err := io.Copy(wc, r)  if err != nil {    s.app.Infof("Error doing copy:", err)  }  if err := wc.Close(); err != nil {    s.app.Infof("ERROR ", err)  }  s.app.Infof("updated object:", wc.Object())  s.app.Infof("Bytes written: %d", count)  return err}这是我在之后得到的错误 wc.Close()    I 16:31:19.729 ERROR %!(EXTRA *url.Error=Post https://www.googleapis.com/upload/storage/v1/b/maxr-test/o?alt=json&uploadType=multipart: Call error 5: )I 16:31:19.729 updated object:%!(EXTRA *storage.Object=<nil>)
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

解决方案之一可能是使用Cloud Storage Java 客户端库在 Cloud Storage 中上传/写入文件。使用它的优点是它自动支持可恢复/块上传,这样您就不会落入 URL Fetch 请求大小超过错误的范围内。这是Go 示例。


查看完整回答
反对 回复 2021-09-20
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信