首页 > 其他分享 >转:文件的断点下载服务端

转:文件的断点下载服务端

时间:2024-06-21 22:20:31浏览次数:26  
标签:info end Header start Add 服务端 断点 Response 下载

原文地址:https://www.yuque.com/yss930819/guqz9f/aly0lz

golang #代码片段 #文件服务 #下载 #goframe

文件的断点续传,需要使用到 HTTP 协议的 206 状态码 实现文件的断点续传,具体的原理在网上可以找到一堆。网上找的所有 golang 代码都缺少一个步骤 flush 即将文件的内容写入后应主动将内容发送到客户端 即代码 39行 内容。

在研究了 java 的实现后,发现所有的 golang 实现都没有用 flush 不知道是 golang 本身提供的 net/http 里的 writer 已经实现了写入即 flush 的功能。

我们使用的 goframe 框架进行开发,在断点续传时需要做如下处理。PS:已使用迅雷和

参考的网站有
https://www.cnblogs.com/peteremperor/p/14081050.html
https://blog.csdn.net/zgh670042085/article/details/84416227

func download(r *ghttp.Request) {
	f,_ := gfile.Open("D:\\Windows.iso")
	info, _:= f.Stat()
	r.Response.Header().Add("Accept-Ranges", "bytes")
	r.Response.Header().Add("Content-Disposition", "attachment; filename="+info.Name())
	var start, end int64
	//fmt.Println(request.Header,"\n")
	if rangeBytes := r.Header.Get("Range"); rangeBytes != "" {
		if strings.Contains(rangeBytes, "bytes=") && strings.Contains(rangeBytes, "-") {
			fmt.Sscanf(rangeBytes, "bytes=%d-%d", &start, &end)
			if end == 0 {
				end = info.Size() - 1
			}
			r.Response.Header().Add("Content-Length", strconv.FormatInt(end-start+1, 10))
			r.Response.Header().Add("Content-Range", fmt.Sprintf("bytes %v-%v/%v", start, end, info.Size()))
			r.Response.WriteHeader(http.StatusPartialContent)
		} else {
			r.Response.WriteHeader(http.StatusBadRequest)
			return
		}
	} else {
		r.Response.Header().Add("Content-Length", strconv.FormatInt(info.Size(), 10))
		start = 0
		end = info.Size() - 1
	}
	_, _ = f.Seek(start, 0)
	n := 1024 * 1024
	buf := make([]byte, n)
	for {
		if end-start+1 < int64(n) {
			n = int(end - start + 1)
		}
		_, err := f.Read(buf[:n])
		if err != nil {
		
		}
		err = nil
		r.Response.Write(buf[:n])
		r.Response.Flush()
		start += int64(n)
		if start >= end+1 {
			return
		}
	}
	
}

标签:info,end,Header,start,Add,服务端,断点,Response,下载
From: https://www.cnblogs.com/soarowl/p/18261595

相关文章

  • DockerHub镜像无法下载的多种解决方案
    hub.docker.com和国内几家DockerHub镜像服务平台陆续下架,停止服务。给使用的同学造成非常大的困扰。汇总了几种目前有效的解决方案,希望能帮助到大家。因为有些链接有时效性,可以关注文中链接的issue。(2024年6月中旬测试可用)Docker镜像加速站为了加速镜像拉取,使用以下命令设......
  • EarMaster Pro中文版安装包下载及安装教程
    ​众所周知软件功能和优势:插上麦克风,演唱,拍手,或在电脑屏幕上演奏您的答案(您还能够选择在mid键盘上演奏答案)。很明显来自丹麦皇家歌曲学院的多媒体歌曲教育软件EarMasterPro以问答的交互形式,寓教于乐的视听方法,给专业和非专业歌曲人士以极大的歌曲学习帮助。根据大数据调......
  • PDFFactory&FinePrint中文版安装包下载及安装教程
    ​由此可知嵌入字体:确保文档中使用的原始字体能被正确显示,即使计算机中没有相应的字体。从总体上来看修复了导致快速连续打印多个文档时导致打印作业失败的错误。很明显修复了有时导致PDF文件中缺少文本的错误。值得一提的是拖放:轻松与Evernote,Gmail和其他基于云的功能集成。......
  • PhotoZoom Pro 8软件下载-详细安装教程视频
    不得不说PhotoZoom功能特性:支持16位/通道(包括Raw)图片。人所共知的是PhotoZoom8新增功能:独立应用软件也打开EXR图片(插件支持EXR)。实际上做设计时,难免常常要上网找一些图形素材,但是有时候我们找到图形效果不尽人意,图形风格符合设计要求的的却图形太小,用photoshop放大后,图形的......
  • Exposure X7软件安装包下载 丨不限速下载丨亲测好用
    根据使用者情况表明Exposure的设计鼓励您进行创造性的工作,使用涂刷和遮罩工具将效果有选择地应用于图片的特定区域,非破坏性图层使您能够混合预设和调整,以获得无尽的外观。我们都知道Exposure是用于创意照片编辑的最佳图片编辑器,Exposure结合了专业级照片调整,庞大的华丽照片外观......
  • Windows Server 2025 中文版、英文版下载 (Inside Preview, updated Jun 2024) - 下一
    WindowsServer2025中文版、英文版下载(InsidePreview,updatedJun2024)-下一代Windows11ServerWindowsServer2025正式版发布在即请访问原文链接:https://sysin.org/blog/windows-server-2025/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org我们知道W......
  • Windows Server 2022 中文版、英文版下载 (updated Jun 2024)
    WindowsServer2022中文版、英文版下载(updatedJun2024)WindowsServer2022x64,Version21H2请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org直接上链接,详细说明请访问原文查看。下载地址Window......
  • Windows Server 2016 中文版、英文版下载 (updated Jun 2024)
    WindowsServer2016中文版、英文版下载(updatedJun2024)WindowsServer2016Version1607请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org本站将不定期发布官方原版风格月度更新ISO。WindowsSer......
  • Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Jun 2024)
    Windows11version23H2中文版、英文版(x64、ARM64)下载(updatedJun2024)Windows11,version23H2,企业版arm64x64请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindows11直接上链接,详细说明请访问原......
  • Windows 10 version 22H2 (updated Jun 2024) 中文版、英文版下载
    Windows10version22H2(updatedJun2024)中文版、英文版下载Windows1022H2企业版arm64x64请访问原文链接:https://sysin.org/blog/windows-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org直接上链接,详细说明请访问原文查看。下载地址语言:简体中文、......