无法将图像发送到 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章