栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用go处理文件上传

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用go处理文件上传

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417781.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号