golang实现断点续传
这里只展示了核心代码部分,使用了封装request和response的gin框架,若小伙伴没使用可用改成go自带的http。
func SendFile(r *gin.Context) {//断点续传标志var range_ext = r.GetHeader("Range")filePath := "." + r.Request.URL.Pathif filePath == "./" {filePath = "./index.html"}parts := strings.Split(filePath, ".")print(parts[len(parts)-1] + "\n")print(filePath + "\n")file1, _ := os.Open(filePath)data, _ := ioutil.ReadAll(file1)//获取content typecontentType := extensionToContentType[parts[len(parts)-1]]print(contentType + "\n")if file1 == nil {r.HTML(404, "404.html", gin.H{})return}var FileStreamSize int64 = r.Request.ContentLengthif FileStreamSize == 0 {fi, _ := file1.Stat()FileStreamSize = fi.Size()}var FileStreamLen string = strconv.FormatInt(FileStreamSize, 10)//Range字段为空, 直接发送数据if range_ext == "" {r.Writer.Header().Set("Content-Type", contentType)r.Writer.Header().Set("Content-Length", FileStreamLen)r.Writer.WriteHeader(200)r.Writer.Write(data)return}//Range字段非空,断点续传模式fmt.Printf("part download...\n")fmt.Printf("head range is:%s\n", range_ext)length := strings.Index(range_ext, "=")allRange := range_ext[length+1:]remove := strings.Index(allRange, "-")prelen := allRange[:remove]behind := allRange[remove+1:]var start int64var end int64if prelen == "" {behindint, _ := strconv.ParseInt(behind, 10, 64)start = FileStreamSize - behindintend = FileStreamSizeFileStreamLen = behind}if behind == "" {prelenint, _ := strconv.ParseInt(prelen, 10, 64)start = prelenintend = FileStreamSizeFileStreamLen = strconv.FormatInt(end-start, 10)}if prelen != "" && behind != "" {prelenint, _ := strconv.ParseInt(prelen, 10, 64)behindint, _ := strconv.ParseInt(behind, 10, 64)start = prelenintend = behindintFileStreamLen = strconv.FormatInt(end-start+1, 10)}allRange = allRange + strconv.FormatInt(FileStreamSize, 10)fmt.Printf("start:%v, end:%v, allRange:%v, FileSize:%v, FileLen:%v\n", start, end, allRange, FileStreamSize, FileStreamLen)r.Writer.Header().Set("Content-Type", contentType)r.Writer.Header().Set("Accept-Ranges", "bytes")r.Writer.Header().Set("Content-Length", FileStreamLen)r.Writer.Header().Set("Content-Range", "bytes "+allRange+"/"+strconv.FormatInt(FileStreamSize, 10))r.Writer.WriteHeader(206)r.Writer.Write(data[start:end])fmt.Println("file Wirte finished")
}
golang实现断点续传相关推荐
- golang实现文件服务器,【Golang】实现文件服务器断点续传
Loading... # 0x00 下载文件时暂停后可以继续接着下载,在线看视频时可以随意拖动进度条,这些都是断点续传所实现的应用. http1.1支持**Range**属性从而实现断点续传,客户端在 ...
- golang实现多协程下载文件(支持断点续传)
golang实现多协程下载文件(支持断点续传) 引言 写这篇文章主要是周末休息太无聊,看了看别人代码,发现基本上要么是多协程下载文件要么就只有单协程的断点续传,所以就试了试有进度条的多协程下载文件(支 ...
- Golang断点续传
目录 前言 一.Seek介绍 二.Seek的使用 1.SeekStart 2.SeekCurrent 3.SeekEnd 三.断点续传 前言 对于一些较大文件的上传下载,我们期望的是能够一次就完成,这 ...
- Golang:实现断点续传(http单线程下载文件)
package breakpointContinuationimport ("fmt""io""io/ioutil""net/ht ...
- Golang:实现断点续传(复制文件)
1.将文件pic_src.jpg复制到pic_des.jpg文件: 2.读写过程中断时,读写的中断位置会记录在"pic_des.jpgtemp.txt"文件里: 3.下次再启动程序 ...
- golang之文件读写/复制/断点续传
目录 一.常用读取文件的三种方式 (1)利用os和file原生操作读文件 (2)使用bufio读取文件 (3)使用ioutil读取文件 二.常用写文件的三种方式 (1)利用os和file原生操作写文件 ...
- Golang操作阿里云OSS上传文件
为什么要使用OSS?应用场景是什么? 最近在开发考试系统,里面需要上传课件,课件包括pdf,map等等各种类型的文件,这些文件不能像图片一样,直接上传到项目目录下面,需要单独存放,阿里云就提供了存储方 ...
- minio断点续传方案
minio断点续传方案 一.功能 二.特点 三.效果 四.详细方案 完整代码在此 完整代码在此 完整代码在此 一.功能 1.分片上传 2.断点续传 3.秒传 二.特点 1.不暴露minio敏感信息 2 ...
- golang 实战企业网盘
一.功能需求 1.基于golang实现分布式文件上传服务 2.ceph和阿里云oss 3.支持断点续传和秒传功能 4.微服务化和容器部署 二.项目使用到的技术 redis mysql rabbitmq ...
最新文章
- 响应因特网端口ping命令_如何使用Ping命令识别基本的Internet问题
- 计算机无法安装系统,为什么计算机无法重新安装系统?
- 富交互Web应用中的撤销和前进
- html2canvas导出地图,Leaflet OpenStreetMap使用html2canvas使用地图标记导出图像
- 创建新的option
- bzoj1269 文本编辑器 splay
- mngoDB 常用语法
- 最优化知识笔记整理汇总
- 深圳端午节骑行活动,欢迎大家参加
- 神舟Z8-SP7D1驱动安装
- ECharts 示例——双Y轴
- 业务与系统的傲慢与偏见
- opc是什么? opc ua是什么?
- 游戏测评浅浅试—MMO手游太古神王2测评
- NAACL'22 Findings | 社交媒体上的抱怨强度分析
- 2021东京奥运会在哪看直播?当贝投影F3看直播效果好么?
- 文摘: 《变革中的思索》:重读《孙子兵法》
- oracle ebs 组件,Oracle EBS 中BOM学习
- 再见SpringMVC!字节跳动正式启动2021届秋季校招!不可思议!
- 基于深度学习和指代消解的中文人名识别
热门文章
- dc元数据和html描述资源,在HTML中使用DC元数据
- 华为AP固件升级方法 (适用 4051TN系列AP)
- 如何用Python计算特征重要性?
- 深度思考:变好,是对看不起你的人最有力的还击
- arduino烧写报错:can‘t open device “\\.\COM1“
- MapReduceJob提:交流程之JobClient端分析
- 关于Google智能眼镜的设计
- AUTOSAR实战教程 - 通信协议栈CAN_CANIF_PDUR_CANTP_COM_XCP_ECUC配置一网打尽
- android mp4v2,MP4v2视频库漏洞分析
- JAVA扫雷小游戏(待改进)