最简单的下载文件的方法?

时间:2013-06-25 18:50:42

标签: file http go

我可以做类似下面的事情,它给了我一个响应类,但我不确定如何将io.reader写入文件。什么是最直接的方式?

http.Get("https://www.domain.com/some.jpg")

2 个答案:

答案 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)
}

https://golang.org/pkg/os#File.ReadFrom