gpt4 book ai didi

rest - GoLang 通过 POST 请求发送文件

转载 作者:IT王子 更新时间:2023-10-29 00:57:57 24 4
gpt4 key购买 nike

我是 GoLang 语言的新手,我想创建用于文件上传的 REST API WebServer...

所以我通过对我的服务器的 POST 请求卡在主要功能(文件上传)...

我有这一行调用上传功能

router.POST("/upload", UploadFile)

这是我的上传功能:

func UploadFile( w http.ResponseWriter, r *http.Request, _ httprouter.Params ) {
io.WriteString(w, "Upload files\n")
postFile( r.Form.Get("file"), "/uploads" )
}

func postFile(filename string, targetUrl string) error {
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)

// this step is very important
fileWriter, err := bodyWriter.CreateFormFile("file", filename)
if err != nil {
fmt.Println("error writing to buffer")
return err
}

// open file handle
fh, err := os.Open(filename)
if err != nil {
fmt.Println("error opening file")
return err
}

//iocopy
_, err = io.Copy(fileWriter, fh)
if err != nil {
panic(err)
}

bodyWriter.FormDataContentType()
bodyWriter.Close()

return err

}

但是我在我的/upload/ 目录中看不到任何上传的文件...

那我做错了什么?

P.S 我遇到第二个错误 => error opening file,所以我认为文件上传或从 UploadFile 函数获取文件有问题,对吗?如果是,那么我如何将文件从该函数转移或获取到 postFile 函数?

最佳答案

multipart.Writer 生成多部分消息,这不是您想要用来从客户端接收文件并将其保存到磁盘的东西。

假设您从客户端上传文件,例如一个浏览器,Content-Type: application/x-www-form-urlencoded 你应该使用 FormFile而不是 r.Form.Get 返回一个 *multipart.File 值,该值包含客户端发送的文件的内容,您可以使用该文件将该内容写入磁盘使用 io.Copy 或其他。

关于rest - GoLang 通过 POST 请求发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com