登录
首页 >  Golang >  Go问答

通过 http 发送文件而不实际创建任何文件

来源:stackoverflow

时间:2024-04-13 22:30:31 292浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《通过 http 发送文件而不实际创建任何文件》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我需要向某个 api 发送 post 请求,该 api 只接受 multipart/form-data 文件。但我的数据为 []byte。现在我能做的就是将此 []byte 数据写入临时文件,然后发送该文件。经过一番谷歌搜索后,我找到了上传文件的代码:

fileDir, _ := os.Getwd()
fileName := "upload-file.txt"
filePath := path.Join(fileDir, fileName)

file, _ := os.Open(filePath)
defer file.Close()

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", filepath.Base(file.Name()))
io.Copy(part, file)
writer.Close()

r, _ := http.NewRequest("POST", "http://example.com", body)
r.Header.Add("Content-Type", writer.FormDataContentType())
client := &http.Client{}
client.Do(r)

经过更多的谷歌搜索,我了解到了这一点。在我看来,发送文件时我们只需要文件名和内容(可能是大小)。我可以提供所有这些数据,而无需创建临时文件、写入该文件,然后再次从该文件读回。

可以这样做吗?我可以以某种方式将 []bytes 作为文件发送吗?非常感谢一个工作示例。


解决方案


[]byte 直接写入该部件。使用此代码将切片 content 写入零件并发布表单:

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "insert-name-here")
part.Write(content) // <-- content is the []byte
writer.Close()

r, _ := http.NewRequest("POST", "http://example.com", body)
r.Header.Add("Content-Type", writer.FormDataContentType())
err := http.DefaultClient.Do(r)
if err != nil {
   // handle error
}

好了,本文到此结束,带大家了解了《通过 http 发送文件而不实际创建任何文件》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>