2 回答

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)在它終于起作用了!

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);
});
- 2 回答
- 0 關(guān)注
- 216 瀏覽
添加回答
舉報(bào)