您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用go处理文件上传

使用go处理文件上传

我设法解决了我的问题,所以这里是万一有人需要的情况。还要感谢@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调用删除了标头对象,现在终于可以了!

Go 2022/1/1 18:16:18 有454人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶