我正在使用http://godoc.org/google.golang.org/cloud/storage#Writer将文件写入GAE Storage。只要我尝试复制的文件大小小于10MB,使用io.Copy
就会返回成功的结果。如果文件大于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>)
答案 0 :(得分:1)
其中一个解决方案可能是使用Cloud Storage Java Client Library在云存储中上传/写入文件。使用它的优点是它自动支持可恢复/块上传,这样你就不会落入该URL获取请求大小超过错误。这是Go example。
答案 1 :(得分:0)
这是由于Google Storage 10MB的限制。 在我的日志中:
com.google.api.services.storage.Storage
这是我发现的,我正在使用Java lib:( Storage client = getService();
Storage.Objects.Insert insertRequest = client.objects().insert(
BUCKET_NAME, objectMetadata, contentStream);
//done by adding following two lines:
// - chunk is set to <10MB (~5MB in this case)
// - directed upload is disabled.
insertRequest.getMediaHttpUploader().setChunkSize(MediaHttpUploader.DEFAULT_CHUNK_SIZE/2); //set to 5MB
insertRequest.getMediaHttpUploader().setDirectUploadEnabled(false);
final StorageObject storageObject = insertRequest.execute();
)
我在google找到了示例,但我的队友仍在调查此事。
也许那会对你有所帮助。完成后我会添加我的结果。
确定。解决了。 MediaHttpUploader.DEFAULT_CHUNK_SIZE大约是10MB,这已经太多了。一切都低于10MB将被接受。
echo GetEnv("SystemDrive");
// C:
也许这会在你的GO问题中通过类比来解决你的问题
干杯!