无法将图像发送到 Go 服务器

Posted

技术标签:

【中文标题】无法将图像发送到 Go 服务器【英文标题】:Failing to send image to Go server 【发布时间】: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 【参考方案1】:

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

您可以做的其他事情是在

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


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

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

console.log(e.target.files)

【讨论】:

我试过后者,在发送之前我已经确保文件存在于客户端,并且我已经检查了r.ParseMultipartForm是否有错误。仍然没有运气,r.ParseMultipartForm 也没有错误。无论如何感谢您的洞察力 天哪,这是解决方案

以上是关于无法将图像发送到 Go 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法将 base64 字符串发送到 PubNub

通常无法将图像从前端发送到云端或后端

无法在服务器中发送图像?

无法将图像从一个活动发送到另一个活动。请查看详情

无法使用文件路径将通用 base64 图像发送到 API

无法将图像发送到其他应用程序,尝试远足、Messenger 和 Whatsapp