我设法解决了我的问题,所以这里是万一有人需要的情况。还要感谢@JiangYD提供了使用curl测试服务器的技巧。
我像@JiangYD所说的那样做,并使用 ,我用响应更新了答案。我发现有一个301重定向是很奇怪的,因为我没有把它放在那儿,所以我决定使用以下curl命令
curl -v -F 'uploadFile=@\"C:/Users/raul-/Desktop/test.png\"' -L http://localhost:8080/submit
(请注意 )curl遵循了重定向,尽管它再次失败,因为在重定向时,curl从POST切换到GET,但是通过该响应,我发现请求/submit
已被重定向到/submit/
,我记得那是我写的方法它在main
功能上。
修复它仍然失败后,响应是http: no such file
,通过查看net/http
代码,我发现它意味着该字段不存在,因此我对访问的所有字段名称进行了快速测试:
for k, _ := range r.MultipartForm.File {
log.Println(k)
}
我得到的'uploadFile
是字段名称,我删除了curl命令中的单引号,现在它完美地上传了文件
但这还没有结束,我现在知道服务器可以正常工作,因为我可以使用来上传文件,curl
但是当我尝试通过托管网页上传文件时,出现了错误:no multipart 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
调用中删除了标头对象,现在终于可以了!