从 Javascript 上传文件并通过 Go 接收文件时遇到问题

Posted

技术标签:

【中文标题】从 Javascript 上传文件并通过 Go 接收文件时遇到问题【英文标题】:Having trouble uploading files from Javascript and receiving it through Go 【发布时间】:2021-09-08 02:50:50 【问题描述】:

我使用 Axiosjavascript 中设置了一个简单的前端服务。该服务获取文件列表并使用发布请求发送到我的服务器代码。我的 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 更改状态

文件上传正在使用 Postman,但不适用于从浏览器运行的 Javascript

通过Go写一个简易版的上传文件到OSS的工具

哪个javascript框架支持ajax方式的文件上传

[go.优惠] 天津购物节进入10月 有趣又有福利的活动一波接一波