Отправка файлов через http без создания файла - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно отправить запрос POST в некоторый API, который принимает только файл как multipart/form-data. Но у меня есть данные как []byte. Теперь я могу записать эти []byte данные во временный файл и затем отправить этот файл. После некоторого поиска в Google я нашел этот код для загрузки файла:

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)

После еще одного поиска в Google я выучил this . Мне кажется, для отправки файлов нам нужно только имя файла и содержание (возможно, размер). Все эти данные я могу предоставить без создания временного файла, записи в этот файл и последующего повторного чтения из этого файла.

Возможно ли это сделать? Можно ли как-нибудь отправить [] байтов в виде файла? Рабочий пример очень ценится.

1 Ответ

1 голос
/ 07 ноября 2019

Напишите []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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...