我可以做类似下面的事情,它给了我一个响应类,但我不确定如何将io.reader写入文件。什么是最直接的方式?
http.Get("https://www.domain.com/some.jpg")
答案 0 :(得分:8)
如果文件足够小,最简单的解决方案是使用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)
您必须在两种情况下都添加相关的错误处理。
答案 1 :(得分:0)
ReadFrom
在某些情况下很有用:
package main
import (
"net/http"
"os"
)
func main() {
r, e := http.Get("http://speedtest.lax.hivelocity.net")
if e != nil {
panic(e)
}
defer r.Body.Close()
f, e := os.Create("index.html")
if e != nil {
panic(e)
}
defer f.Close()
f.ReadFrom(r.Body)
}