gpt4 book ai didi

go - 如何在 Go 中为使用 'multipart' 提交的表单设置内容类型

转载 作者:IT王子 更新时间:2023-10-29 01:20:33 28 4
gpt4 key购买 nike

我正在尝试上传一个需要我为 API 设置特定内容类型的文件。当我这样做时:

file, err := os.Open("helloWorld.wav")
buf := new(bytes.Buffer)
writer := multipart.NewWriter(buf)
audioFile, _ := writer.CreateFormFile("file", "helloWorld.wav")
_, err = io.Copy(audioFile, file)
if err != nil {
return nil, 0, err
}
writer.Close()

它正确地创建了多部分表单,但采用了这种内容类型:

Content-Type: application/octet-stream

我需要能够将其设置为:

Content-Type: audio/wav;rate=8000

虽然我当然可以为 net/http 设置 header ,但我看不到如何为多部分表单中的各个字段执行此操作。

最佳答案

查看源代码mime/multipart这是不可能的,但你可以实现这样的东西(注意:它没有正确处理文件名的转义)

    func CreateAudioFormFile(w *multipart.Writer, filename string) (io.Writer, error) {
h := make(textproto.MIMEHeader)
h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`, "file", filename))
h.Set("Content-Type", "audio/wav;rate=8000")
return w.CreatePart(h)
}

输出

--0c4c6b408a5a8bf7a37060e54f4febd6083fd6758fd4b3975c4e2ea93732 Content-Disposition: form-data; name="file"; filename="helloWorld.wav" Content-Type: audio/wav;rate=8000 --0c4c6b408a5a8bf7a37060e54f4febd6083fd6758fd4b3975c4e2ea93732--

参见 playground完整的例子。

编辑:要写入文件数据,还要像原始示例一样将其复制到写入器。

audioFile, _ := CreateAudioFormFile(writer2, "helloWorld.wav")
io.Copy(audioFile, file)

参见 updated playground包含文件数据的完整示例。

关于go - 如何在 Go 中为使用 'multipart' 提交的表单设置内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21130566/

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