我有一个小代码,从谷歌云存储读取100 MB文件,然后返回输出。代码对于 1MB 文件工作正常,但对于 100 MB 文件失败。下面是不起作用的代码rc, err := client.Bucket("mabucket").Object(gcpurl).NewReader(ctx) if err != nil { fmt.Println(err) return } defer rc.Close() w.Header().Set("Content-Length", strconv.Itoa(int(rc.Size()))) w.Header().Set("Cache-Control", "max-age=2592000") w.Header().Set("Content-Type", rc.ContentType()) spew.Dump(rc.ContentType()) if rc.ContentType() == "audio/wav" || rc.ContentType() == "audio/wave" { w.Header().Set("Accept-Ranges", "bytes") tilrange := rc.Size() - 1 newRangeString := "bytes 0-" + strconv.Itoa(int(tilrange)) + "/" + strconv.Itoa(int(rc.Size())) w.Header().Set("Content-Range", newRangeString) w.WriteHeader(206) } //spew.Dump(rc.Attrs) io.Copy(w, rc)我写了另一个代码,能够下载相同的文件并创建一个100 mb的本地文件。这次我使用的是ioutil。全部阅读。从 GCP 接收大日期时,io.copy 会有什么问题?func main() { ctx := context.Background() client, _ := storage.NewClient(ctx) data, err := downloadFile(client, "mabucket", "606ff2b71a916907409a953f/606ff2ed1a916907409a9540/60a38a967b291f7b44488824/123/audio/210415164000M29713363.wav") //210415164000M29713363.wav if err != nil { log.Fatalf("Cannot read object: %v", err) } fmt.Printf("Object contents: %d\n", len(data)) f, err := os.Create("a.wav") check(err) defer f.Close() n2, err := f.Write(data) check(err) fmt.Printf("wrote %d bytes\n", n2)}// downloadFile downloads an object.func downloadFile(client *storage.Client, bucket, object string) ([]byte, error) { // [START download_file] ctx := context.Background() ctx, cancel := context.WithTimeout(ctx, time.Second*50) defer cancel() rc, err := client.Bucket(bucket).Object(object).NewReader(ctx) if err != nil { return nil, err } defer rc.Close() data, err := ioutil.ReadAll(rc) if err != nil { return nil, err } return data, nil // [END download_file]}
1 回答

皈依舞
TA贡献1851条经验 获得超3个赞
io.copy试图复制详细信息,但操作系统不允许这样做。它抛出错误为(*net。OpError)(0xc0003302d0)(写 tcp [::1]:80->[::1]:63014: wsasend: 已建立的连接被主机中的软件中止
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消