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

Golang io.copy 不复制整个数据

Golang io.copy 不复制整个数据

Go
慕田峪4524236 2022-08-30 21:47:09
我有一个小代码,从谷歌云存储读取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: 已建立的连接被主机中的软件中止


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号