第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復 azure-storage-blob-go 中的“驗證失?。鹤侄?ldquo;body”不存在”錯誤?

如何修復 azure-storage-blob-go 中的“驗證失?。鹤侄?ldquo;body”不存在”錯誤?

Go
蕭十郎 2023-08-07 15:15:05
我正在嘗試將多部分文件上傳到 blob AppendBlock(),但出現(xiàn)此錯誤:-> github.com/Azure/azure-pipeline-go/pipeline.NewError, /home/makoto/go/pkg/mod/github.com/!azure/azure-pipeline-go@v0.2.1/pipeline/error.go:159validation failed: parameter=body constraint=Null value=multipart.sectionReadCloser{SectionReader:(*io.SectionReader)(0xc000643a40)} details: field "body" doesn't existfunc Upload(file multipart.File) error {    credential, err := azblob.NewSharedKeyCredential("credential strings", "")    if err != nil {        return err    }    u, _ := url.Parse("blob url")    appendBlobURL := azblob.NewAppendBlobURL(        *u,        azblob.NewPipeline(credential, azblob.PipelineOptions{}),    )    _, err = appendBlobURL.Create(        context.Background(),        azblob.BlobHTTPHeaders{},        azblob.Metadata{},        azblob.BlobAccessConditions{},    )    if err != nil {        return err    }    _, err = appendBlobURL.AppendBlock(context.Background(), file, azblob.AppendBlobAccessConditions{}, nil)    // validation failed: parameter=body constraint=Null value=multipart.sectionReadCloser{SectionReader:(*io.SectionReader)(0xc000643a40)}    // details: field "body" doesn't exist    return err}string.Builder如果我傳遞 a而不是多部分文件,它可以正常工作而不會引發(fā)錯誤。為什么會出現(xiàn)此錯誤?我該如何修復它?
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經(jīng)驗 獲得超7個贊

這是我在 Go 中遇到的最愚蠢的錯誤之一,所以這希望可以幫助任何遇到這個問題的人。


錯誤源于這里。在此函數(shù)的正上方,您可以看到 的值multipart.File采用case reflect.Struct:switch 情況。如果你傳遞 a string.Builder,它就會采用該case reflect.Ptr:路徑。當我們傳入 a 時,我們可以multipart.File通過將其包裝在結(jié)構(gòu)體中并獲取其指針來強制執(zhí)行此路徑。


wrapper := &struct{ io.ReadSeeker }{file}

_, err = appendBlobURL.AppendBlock(context.Background(), wrapper, azblob.AppendBlobAccessConditions{}, nil)

return err


查看完整回答
反對 回復 2023-08-07
?
青春有我

TA貢獻1784條經(jīng)驗 獲得超8個贊

事實證明,multipart.File當首先使用 檢索不同的表單值r.FormFile("someKey"),然后調(diào)用r.ParseMultipartForm(),然后使用時,確實是 Struct 類型


type Block struct {

  File *multipart.File

  Name *string

}

func someFunction(r *http.Request, w http.ResonseWriter) error {

  r.Body = http.MaxBytesReader(w, r.Body, maxUploadSize)

  if err := r.ParseMultipartForm(maxMemory); err != nil {

    return err

  }

  someFunction1(r)

}

func someFunction1(r *http.Request) {

  var f multipart.File

  someFunction2(r, &f)


  name := "block1"

  b := Block{

    File: &f,

    Name: &name,

  }


  someUploadFunc(&b, "cn")

}

func someFunction2(r *http.Request, *v multipart.File) error {

  f := r.FormFile("fileKey")

  *v = f

  return nil

}

func someUploadFunc(b *Block, cn string) {

  curl := bs.NewContainerURL(cn)

  burl := curl.NewBlockBlobURL(*b.Name)

  lac := azblob.LeaseAccessConditions{}


  r, err := burl.StageBlock(ur.Context, "123", *b.File, lac, nil)

  ...

}

引用指向文件的指針。在這種情況下*v將是類型Struct。但是,通過將處理順序更改為先調(diào)用r.ParseMultipartForm(),然后r.FormFile("someKey")再調(diào)用r.FormFile("fileKey"),*v則類型為multipart.File。


我不太清楚為什么會出現(xiàn)這種情況。看起來是 Golang 問題?您的解決方案確實是一種解決方法,但是如上所述,我能夠通過確保表單處理順序正確來完全防止該問題。


查看完整回答
反對 回復 2023-08-07
  • 2 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號