5

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

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

2 回答 2

9

如果文件足够小,最简单的解决方案是使用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)

您必须在这两种情况下添加相关的错误处理。

于 2013-06-25T18:56:25.397 回答
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

于 2021-03-18T01:09:10.430 回答