Я могу сделать что-то вроде ниже, что дает мне класс ответов, но я не совсем уверен, как написать io.reader в файл. Какой самый простой способ?Самый простой способ загрузить файл?
http.Get("https://www.domain.com/some.jpg")
Я могу сделать что-то вроде ниже, что дает мне класс ответов, но я не совсем уверен, как написать io.reader в файл. Какой самый простой способ?Самый простой способ загрузить файл?
http.Get("https://www.domain.com/some.jpg")
Если файл достаточно мал, самым простым решением является использование ioutil.WriteFile в сочетании с ioutil.ReadAll:
resp, err := http.Get("your url")
bytes, err := ioutil.ReadAll(resp.Body)
err = ioutil.WriteFile(filename, bytes, 0666)
Если файл не настолько мал, что лучше избегать создания и наполнения bytes
массив. Тогда вы должны использовать io.Copy, который просто копирует байты от читателя к писателю:
resp, err := http.Get("your url")
f, err := os.Create(filename)
defer f.Close()
_, err := io.Copy(f, resp.Body)
Вы должны добавить соответствующую обработку ошибок в обоих случаях.
Я бы очень хотел подчеркнуть «ioutil.ReadAll» - это почти никогда не то, что вы хотите делать в хорошо управляемом приложении. – Dustin
@Dustin Если файл достаточно мал, я думаю, что это не имеет значения. Как вы думаете, я должен уделять больше внимания этому вопросу? –
Я не согласен с вами, но, возможно, версия io.Copy должна быть первой. Я думаю, что ваш код и рассуждения являются правильными (хотя я мог бы сделать что-то неприятное для вашей программы). Я просто боюсь, что увижу больше людей, делающих «все в память». – Dustin