当前位置: 首页 > news >正文

golang文件下载断点续传(下载客户端)

客户端:

//const (
//    UA = "Golang Downloader from Kejibo.com"
//)
func DownloadController(ctx *gin.Context) {


    f, err := os.OpenFile("./file.exe", os.O_RDWR|os.O_CREATE, 0666) //O_RDWR|O_CREATE,也就是文件不存在的情况下就建一个空文件,因为windows下还有BUG,如果使用这个O_CREATE,就会直接清空文件,所以windows不用这个标志,你自己事先建立好文件。
    if err != nil {
        panic(err)
    }
    stat, err := f.Stat() //获取文件状态
    if err != nil {
        panic(err)
    }
    f.Seek(stat.Size(), 0) //把文件指针指到文件末,当然你说为何不直接用 O_APPEND 模式打开,没错是可以。我这里只是试验。
    //f.Seek(int64(os.O_APPEND), 0)
    url1 := "http://dl.google.com/chrome/install/696.57/chrome_installer.exe"
    var req http.Request
    req.Method = "GET"
    //req.UserAgent = UA  //客户端信息字符串,不过我加上UserAgent,一直报错,不知道怎么回事,暂时不用它
    req.Close = true
    req.URL, err = url.Parse(url1)
    if err != nil {
        panic(err)
    }
    header := http.Header{}
    header.Set("Range", "bytes="+strconv.FormatInt(stat.Size(), 10)+"-")
    req.Header = header
    resp, err := http.DefaultClient.Do(&req)
    if err != nil {
        panic(err)
    }
    written, err := io.Copy(f, resp.Body)
    if err != nil {
        panic(err)
    }
    println("written: ", written)
}

 另外一个例子:

传送门:https://blog.csdn.net/luckytanggu/article/details/79830493

 

无断点续传:https://www.jianshu.com/p/b49cc19d26f0

转载于:https://www.cnblogs.com/zhzhlong/p/9657244.html

相关文章:

  • 天体运行轨迹_按彗星轨迹,太阳系中存在第二平面,有可能是彗星的“第二家园”...
  • 一个网页打开的全过程
  • 环境图配置不存在pbr_[翻译]你也可以制作的PBR!
  • 单引号和双引号的区别
  • 前端缓动画为什么不能有小数_前端兼容性的一些问题
  • luogu4187 [USACO18JAN]Stamp Painting (dp)
  • jsencrypt vue使用_在VUE中使用RSA加密解密加签解签__Vue.js
  • Learning-Python【6】:Python数据类型(2)—— 列表、元组
  • 如何计算虚拟化vcpu_【虚拟化实战】VM设计之一vCPU
  • 小希的迷宫(并查集判环)
  • 标志寄存器df_标志寄存器的详细解释
  • 分布式框架
  • c++ vector 头文件_Vector:C++界热销的Pro版数组
  • MFC中ON_COMMAND,ON_MESSAGE,ON_NOTIFY的区别
  • pdo mysql insert id_php pdo insert与pdo insertId的用法
  • @angular/forms 源码解析之双向绑定
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【面试系列】之二:关于js原型
  • 78. Subsets
  • Angular Elements 及其运作原理
  • Java基本数据类型之Number
  • Laravel Mix运行时关于es2015报错解决方案
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Twitter赢在开放,三年创造奇迹
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于webpack 的 vue 多页架构
  • 首页查询功能的一次实现过程
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信开放平台全网发布【失败】的几点排查方法
  • 微信小程序实战练习(仿五洲到家微信版)
  • 想写好前端,先练好内功
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (原創) 未来三学期想要修的课 (日記)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)jdk与jre的区别
  • ***测试-HTTP方法
  • .gitignore文件_Git:.gitignore
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET CORE Aws S3 使用
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 回调、接口回调、 委托
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net下简单快捷的数值高低位切换
  • @ConfigurationProperties注解对数据的自动封装
  • @DataRedisTest测试redis从未如此丝滑
  • @JoinTable会自动删除关联表的数据
  • @selector(..)警告提示
  • @vue/cli 3.x+引入jQuery
  • [.NET]桃源网络硬盘 v7.4
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Angular 基础] - 指令(directives)