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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 go 處理文件上傳

使用 go 處理文件上傳

Go
慕勒3428872 2021-11-22 17:47:45
我最近開始玩圍棋,所以我還是個(gè)菜鳥,如果我犯了太多錯(cuò)誤,請(qǐng)見諒。我一直試圖解決這個(gè)問題很長(zhǎng)時(shí)間,但我只是不明白發(fā)生了什么。在我的 main.go 文件中,我有一個(gè) main 函數(shù):func main() {    http.HandleFunc("/", handler)    http.HandleFunc("/submit/", submit)    log.Fatal(http.ListenAndServe(":8080", nil))}處理程序函數(shù)如下所示:func handler(w http.ResponseWriter, r *http.Request) {    data, _ := ioutil.ReadFile("web/index.html")    w.Write(data)}我知道這不是為網(wǎng)站提供服務(wù)的最佳方式提交功能如下所示:func submit(w http.ResponseWriter, r *http.Request) {    log.Println("METHOD IS " + r.Method + " AND CONTENT-TYPE IS " + r.Header.Get("Content-Type"))    r.ParseMultipartForm(32 << 20)    file, header, err := r.FormFile("uploadFile")    if err != nil {        json.NewEncoder(w).Encode(Response{err.Error(), true})        return    }    defer file.Close()    out, err := os.Create("/tmp/file_" + time.Now().String() + ".png")    if err != nil {        json.NewEncoder(w).Encode(Response{err.Error(), true})        return    }    defer out.Close()    _, err = io.Copy(out, file)    if err != nil {        json.NewEncoder(w).Encode(Response{err.Error(), true})        return    }    json.NewEncoder(w).Encode(Response{"File '" + header.Filename + "' submited successfully", false})}問題是,當(dāng)執(zhí)行功能的提交,r.Method是GET和r.Header.Get("Content-Type")是一個(gè)空字符串,然后繼續(xù),直到第一,如果其中r.FormFile返回以下錯(cuò)誤: request Content-Type isn't multipart/form-data 我不明白為什么r.Method總是GET和沒有內(nèi)容-類型。我嘗試以多種不同的方式執(zhí)行 index.html,但 r.Method 始終為 GET,而 Content-Type 為空。這是 index.html 中上傳文件的函數(shù):function upload() {    var formData = new FormData();    formData.append('uploadFile', document.querySelector('#file-input').files[0]);    fetch('/submit', {        method: 'post',        headers: {          "Content-Type": "multipart/form-data"        },但這也不起作用。我用 Google 搜索過如何使用 fetch() 以及如何從 go 接收文件上傳,我發(fā)現(xiàn)它們與我的非常相似,我不知道我做錯(cuò)了什么。
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

我設(shè)法解決了我的問題,所以在這里以防其他人需要它。并感謝@JiangYD 提供使用 curl 測(cè)試服務(wù)器的技巧。


TL; 博士

我寫了,http.HandleFunc("/submit/", submit)但我正在向/submit(注意缺少的斜線)發(fā)出 POST 請(qǐng)求<<這很重要,因?yàn)橹囟ㄏ?/p>

不要自己指定 Content-Type,瀏覽器會(huì)為你做

長(zhǎng)答案

我按照@JiangYD 說的做了,并使用curl 來測(cè)試服務(wù)器,我用響應(yīng)更新了我的答案。我發(fā)現(xiàn)奇怪的是有一個(gè) 301 重定向,因?yàn)槲覜]有把它放在那里,我決定使用以下 curl 命令


curl -v -F 'uploadFile=@\"C:/Users/raul-/Desktop/test.png\"' -L http://localhost:8080/submit

(注意-L)那樣 curl 跟隨重定向,盡管它再次失敗,因?yàn)樵谥囟ㄏ驎r(shí),curl 從 POST 切換到 GET 但通過該響應(yīng)我發(fā)現(xiàn)請(qǐng)求/submit被重定向到/submit/,我記得我是這樣寫的它在main函數(shù)中。


在修復(fù)它仍然失敗后,響應(yīng)是http: no such file并且通過查看net/http代碼我發(fā)現(xiàn)這意味著該字段不存在,因此我對(duì)獲得的所有字段名稱進(jìn)行了快速迭代:


for k, _ := range r.MultipartForm.File {

    log.Println(k)

}

我得到'uploadFile了字段名稱,我刪除了 curl 命令中的單引號(hào),現(xiàn)在它完美地上傳了文件


但這并沒有結(jié)束,我現(xiàn)在知道服務(wù)器工作正常,因?yàn)槲铱梢允褂蒙蟼魑募?,curl但是當(dāng)我嘗試通過托管網(wǎng)頁(yè)上傳文件時(shí),出現(xiàn)錯(cuò)誤:no multipart boundary param in Content-Type.


所以我發(fā)現(xiàn)我應(yīng)該在標(biāo)題中包含邊界,我將 fetch 更改為這樣的:


fetch('/submit', {

    method: 'post',

    headers: {

        "Content-Type": "multipart/form-data; boundary=------------------------" + boundary

    }, body: formData})

我像這樣計(jì)算邊界:


var boundary = Math.random().toString().substr(2);

但是我還是有一個(gè)錯(cuò)誤:multipart: NextPart: EOF那么你如何計(jì)算邊界?我閱讀了規(guī)范https://html.spec.whatwg.org/multipage/forms.html#multipart/form-data-encoding-algorithm并發(fā)現(xiàn)邊界是由對(duì)文件進(jìn)行編碼的算法計(jì)算的,在我的情況下是 FormData,F(xiàn)ormData API 沒有公開獲取該邊界的方法,但我發(fā)現(xiàn)瀏覽器會(huì)multipart/form-data自動(dòng)添加 Content-Type with和邊界,如果您不指定它,所以我從fetch調(diào)用中刪除了 headers 對(duì)象和現(xiàn)在它終于起作用了!


查看完整回答
反對(duì) 回復(fù) 2021-11-22
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

完全刪除標(biāo)題實(shí)際上有效。尤其是通過 fetch 或 axios 發(fā)送請(qǐng)求時(shí)。


axios.post(

                    endpoint + "/api/v1/personalslip",

                    {

                      newSlip

                    },

                    {



                     

                    }

                  )

                  .then(res => {

                    console.log(res);

                  });


查看完整回答
反對(duì) 回復(fù) 2021-11-22
  • 2 回答
  • 0 關(guān)注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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