从 Javascript 上传文件并通过 Go 接收文件时遇到问题
Posted
技术标签:
【中文标题】从 Javascript 上传文件并通过 Go 接收文件时遇到问题【英文标题】:Having trouble uploading files from Javascript and receiving it through Go 【发布时间】:2021-09-08 02:50:50 【问题描述】:我使用 Axios 在 javascript 中设置了一个简单的前端服务。该服务获取文件列表并使用发布请求发送到我的服务器代码。我的 JavaScript 看起来像这样
const testPost = async (files) =>
let formData = new FormData();
files.forEach((file) =>
formData.append("file", file);
);
const res = await axios(
method: "POST",
url: baseUrl,
data: formData,
headers:
"Content-Type": "multipart/form-data",
,
);
return res;
;
我的 Go 代码如下所示:
func (h *SendHandler) TestPost(w http.ResponseWriter, r *http.Request)
//Allow CORS here By * or specific origin
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
formdata := r.MultipartForm
fmt.Println(formdata)
我认为我的问题在于我在 Go 中的 TestPost 函数的主体,因为我在前端代码中单击发送,我收到了响应。在我的 Go 函数中,当我打印表单数据时,它会输出 <nil>
。我希望能够访问列表中的每个文件,但我什至无法访问表单数据。我对 web dev 和 Go 仍然是新手,所以我肯定在这里误解了一些东西。有什么指点吗?
【问题讨论】:
【参考方案1】:documentation for MultipartForm 说:
MultipartForm 是解析后的多部分表单,包括文件上传。该字段仅在调用 ParseMultipartForm 后可用。
在使用 r.MultipartForm
之前调用 ParseMultipartForm 进行修复。
err := r.ParseMultipartForm(maxMemory)
if err != nil
http.Error(w, "Bad Request", http.StatusBadRequest)
return
// r.MultipartForm is now set.
fmt.Println(r.MultipartForm) // does not print nil
【讨论】:
以上是关于从 Javascript 上传文件并通过 Go 接收文件时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何像我在代码中所做的那样,在通过javascript上传后,如何上传多个图像文件并相应地查看它们?
通过 AWS SDK for Go 在 Device Farm 中上传的 Android 应用程序从未从 INITIALIZED 更改状态