我设法解决了我的问题,所以这里是万一有人需要的情况。还要感谢@JiangYD提供了使用curl测试服务器的技巧。
TL; DR
- 我写了,
http.HandleFunc("/submit/", submit)但是我正在发出POST请求/submit
(请注意缺少斜杠)<<这很重要,因为重定向 - 不要自己指定Content-Type,浏览器会为您完成
长答案
我像@JiangYD所说的那样做,并使用 curl来测试服务器
,我用响应更新了答案。我发现有一个301重定向是很奇怪的,因为我没有把它放在那儿,所以我决定使用以下curl命令
curl -v -F 'uploadFile=@"C:/Users/raul-/Desktop/test.png"' -L http://localhost:8080/submit
(请注意 -L
)curl遵循了重定向,尽管它再次失败,因为在重定向时,curl从POST切换到GET,但是通过该响应,我发现请求
/submit已被重定向到
/submit/,我记得那是我写的方法它在
main功能上。
修复它仍然失败后,响应是
http: no suchfile,通过查看
net/http代码,我发现它意味着该字段不存在,因此我对访问的所有字段名称进行了快速测试:
for k, _ := range r.MultipartForm.File { log.Println(k)}我得到的
'uploadFile是字段名称,我删除了curl命令中的单引号,现在它完美地上传了文件
但这还没有结束,我现在知道服务器可以正常工作,因为我可以使用来上传文件,
curl但是当我尝试通过托管网页上传文件时,出现了错误:
nomultipart boundary param in Content-Type。
因此,我发现我想在标头中包含边界,因此将fetch更改为以下内容:
fetch('/submit', { method: 'post', headers: { "Content-Type": "multipart/form-data; boundary=------------------------" + boundary }, body: formData})我这样计算边界:
var boundary = Math.random().toString().substr(2);
但是我仍然有一个错误:
multipart: NextPart:EOF那么如何计算边界?我阅读了规范https://html.spec.whatwg.org/multipage/forms.html#multipart/form-
data-encoding-
algorithm,发现边界是由对文件进行编码的算法计算得出的,在我的情况下是FormData,FormData
API并未提供获取该边界的方法,但我发现浏览器会自动将Content-Type与
multipart/form-data和添加边界(如果未指定),因此我从
fetch调用中删除了标头对象,现在终于可以了!



