为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
守着一只汪 2023-07-31 17:25:34
我需要向某个 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 作为文件发送吗?非常感谢一个工作示例。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

直接将其写入[]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

}


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信