国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go語言下載網(wǎng)絡圖片或文件的方法示例

2020-04-01 18:50:37
字體:
來源:轉載
供稿:網(wǎng)友

最近閑來無事, 于是就簡單學習了下Go語言的基本的用法。由于實踐才是最快的學習方法,所以這里就以下載網(wǎng)絡圖片或文件入手來學習Go語言

文件下載到本地,通常的思路就是先獲得網(wǎng)絡文件的 輸入流 以及本地文件的 輸出流 ,再讀取輸入流到輸出流中,因此自然也要獲取相應的 Reader 和 Writer 。

下面首先是使用GoLang的http.Get()方法(使用client的do方法原理類似)

// 圖片以花瓣網(wǎng)的圖片為例  imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"  res, err := http.Get(imgUrl)  if err != nil {    fmt.Println("A error occurred!")    return  }  // defer后的為延時操作,通常用來釋放相關變量  defer res.Body.Close()

然后獲得get請求響應的reader對象

// 獲得get請求響應的reader對象  reader := bufio.NewReaderSize(res.Body, 32 * 1024)

上面獲取到了輸入流的reader對象, 下面來獲取本地文件的輸出流的writer對象

imgPath := "C://Users//Asche//go//src//GoSpiderTest//"  // 根據(jù)圖片url獲取其文件名  fileName := path.Base(imgUrl)    file, err := os.Create(imgPath + fileName)  if err != nil {    panic(err)  }  // 獲得文件的writer對象  writer := bufio.NewWriter(file)

好了, reader和writer對象都得到了,然后在讀取寫入。

如果嫌麻煩的話,可以直接copy:

written, _ := io.Copy(writer, reader)  // 輸出文件字節(jié)大小  fmt.Printf("Total length: %d", written)

或則手動讀取和寫入

bytes := make([]byte, 32 * 1024)  for {    len, err := reader.Read(bytes)    if len < 0 || err != nil{      return    }    // 注意這里byte數(shù)組后的[0:len],不然可能會導致寫入多余的數(shù)據(jù)    _, _ = writer.Write(bytes[0:len])    fmt.Printf("%d ", len)  }

ok,下載完成。

下面貼上完整的代碼(讀取寫入采用的方法一)

package mainimport (  "bufio"  "fmt"  "io"  "net/http"  "os"  "path")func main() {  imgPath := "C://Users//Asche//go//src//GoSpiderTest//"  imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"  fileName := path.Base(imgUrl)  res, err := http.Get(imgUrl)  if err != nil {    fmt.Println("A error occurred!")    return  }  defer res.Body.Close()  // 獲得get請求響應的reader對象  reader := bufio.NewReaderSize(res.Body, 32 * 1024)  file, err := os.Create(imgPath + fileName)  if err != nil {    panic(err)  }  // 獲得文件的writer對象  writer := bufio.NewWriter(file)  written, _ := io.Copy(writer, reader)  fmt.Printf("Total length: %d", written)}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天峨县| 永兴县| 乐都县| 图们市| 江油市| 正定县| 舒城县| 林州市| 贵港市| 江达县| 吴旗县| 榕江县| 石楼县| 吉木乃县| 望江县| 七台河市| 兴和县| 班玛县| 磴口县| 咸宁市| 包头市| 塔河县| 家居| 九寨沟县| 凤山县| 会泽县| 罗甸县| 凤山市| 临安市| 花垣县| 晋宁县| 高雄县| 台北县| 基隆市| 安康市| 襄城县| 独山县| 大田县| 新巴尔虎左旗| 衡东县| 庆阳市|