栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

HTTP中通过get方法下载文件

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HTTP中通过get方法下载文件

http下载文件的本质就是在响应体中拿到响应数据并写入到文件的操作,第二种方式是实现了一个实时显示下载进度的功能

package main

import (
   "fmt"
   "io"
   "net/http"
   "os"
)

func downloadFile(url, fileName string) {
   resp, err := http.Get(url)
   if err != nil {
      panic(err)
   }

   defer func() {_ = resp.Body.Close()}()

   file, err := os.Create(fileName)
   if err != nil {
      panic(err)
   }
   defer file.Close()

   n, err := io.Copy(file, resp.Body)
   fmt.Println(n, err)
}

type Reader struct {
   io.Reader
   Total int64
   Currnet int64
}
func (r *Reader) Read(p []byte) (n int, err error) {
   n, err = r.Reader.Read(p)

   r.Currnet += int64(n)
   fmt.Printf("r %.2f%%", float64(r.Currnet * 10000 / r.Total) / 100)
   return
}

func DownloadFileProgress(url, fileName string){
   resp, err := http.Get(url)
   if err != nil {
      panic(err)
   }

   defer func() {_ = resp.Body.Close()}()

   file, err := os.Create(fileName)
   if err != nil {
      panic(err)
   }
   defer file.Close()

   reader := &Reader{
      Reader:  resp.Body,
      Total:   resp.ContentLength,
   }
   io.Copy(file, reader)
}
func main(){
   //下载文件url
   url := "https://i1.hdslb.com/bfs/face/0d2f52b9e1dae83b2cd710b38ee911533db32774.jpg"
   //下载后保存的文件名
   fileName := "example.png"
   //downloadFile(url, fileName)
   DownloadFileProgress(url, fileName)
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号