【问题标题】:Failing to send image to Go server无法将图像发送到 Go 服务器
【发布时间】:2019-05-11 19:32:15
【问题描述】:

最近我开始使用 Go 制作服务器,在我目前的实验中,我试图通过 React.js 前端上的 fetch 将图像上传到我的 Go/mux 网络服务器。每当我通过表单上传图像时,服务器都无法接收图像并返回“没有这样的文件”错误。我正在使用 JS 的 FormData API 来存储和发送图像。

这是客户端的代码

handleInput = (e) => {
    let formData = new FormData();
    formData.append("myImage", e.target.files)
    fetch("http://localhost:8080/api", {
      method: 'POST',
      body: formData,
    })
    .then((res) => {
       console.log(res)
    })
    .then(() => {
       console.log("Success")
      })
    .catch((error) => console.error(error))
  }

这是服务器的代码

func api(w http.ResponseWriter, r *http.Request) {

    w.Header().Set("Access-Control-Allow-Origin", "*")

    fmt.Println("Connected -> api route")
    fmt.Fprintf(w, "connected to api")

    // ERROR HERE: no such file / failed to retrieve image
    r.ParseMultipartForm(32 << 20)
    file, _, err := r.FormFile("myImage")
    if err != nil {
        log.Print(err)
        fmt.Println("failed to retrieve image")
        w.WriteHeader(http.StatusBadRequest)
        return
    } else if err == nil {
        fmt.Println("Success")
    }

    defer file.Close()
}

我已尝试添加和删除 multipart/form-data 标头,但均未奏效。

我是 Go 新手,仍在尝试解决问题,感谢任何帮助!

【问题讨论】:

  • 您是否在 POST 请求或之前的 OPTIONS 请求中看到错误? OPTIONS 请求不包含正文(如预期的那样)。
  • @Peter 我在 POST 请求中没有看到任何错误,浏览器没有捕获任何错误并返回“成功”,我看到的唯一错误是服务器在控制台上返回的错误上面写着“没有这样的文件”
  • 您可以尝试将请求对象转储到服务器端进行检查golang.org/pkg/net/http/httputil/#DumpRequest

标签: javascript reactjs go fetch mux


【解决方案1】:

检查代码,这是一种非常标准的上传文件方法,您的 Go api 是否与其他服务一起使用?我找不到任何错误,所以可能更多的是关于一般 api 的配置方式。

您可以做的其他事情是在

处处理错误
if err := r.ParseMultipartForm(32 << 20); err != nil {
fmt.Println(err)
}

也许您可以更好地了解错误

还要确保你的文件在附加之前确实存在

console.log(e.target.files)

【讨论】:

  • 我试过后者,在发送之前我已经确保文件存在于客户端,并且我已经检查了r.ParseMultipartForm是否有错误。仍然没有运气,r.ParseMultipartForm 也没有错误。无论如何感谢您的洞察力
  • 天哪,这是解决方案
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 2015-07-27
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多