我需要向某個 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)經過更多谷歌搜索后,我了解到了這一點。在我看來,發送文件時我們只需要文件名和內容(可能是大?。N铱梢蕴峁┧羞@些數據,而無需創建臨時文件、寫入該文件,然后再次從該文件讀回??梢赃@樣做嗎?我可以以某種方式將 []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
}
- 1 回答
- 0 關注
- 177 瀏覽
添加回答
舉報
0/150
提交
取消