代码:

<?php
function dl_file_resume($file){ //检测文件是否存在 if (!is_file($file)) { die("<b>404 File not found!</b>"); } $len = filesize($file);//获取文件大小 $filename = basename($file);//获取文件名字 $file_extension = strtolower(substr(strrchr($filename,"."),1));//获取文件扩展名 //根据扩展名 指出输出浏览器格式 switch( $file_extension ) { case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "mp3": $ctype="audio/mpeg"; break; case "mpg":$ctype="video/mpeg"; break; case "avi": $ctype="video/x-msvideo"; break; default: $ctype="application/force-download"; } //Begin writing headers header("Cache-Control:"); header("Cache-Control: public"); //设置输出浏览器格式 header("Content-Type: $ctype"); if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {//如果是IE浏览器 # workaround for IE filename bug with multiple periods / multiple dots in filename # that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe $iefilename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1); header("Content-Disposition: attachment; filename=\"$iefilename\""); } else { header("Content-Disposition: attachment; filename=\"$filename\""); } header("Accept-Ranges: bytes"); $size=filesize($file); //如果有$_SERVER['HTTP_RANGE']参数 if(isset($_SERVER['HTTP_RANGE'])) {
/*   --------------------------- Range头域   Range头域可以请求实体的一个或者多个子范围。例如,   表示头500个字节:bytes=0-499   表示第二个500字节:bytes=500-999   表示最后500个字节:bytes=-500   表示500字节以后的范围:bytes=500-   第一个和最后一个字节:bytes=0-0,-1   同时指定几个范围:bytes=500-600,601-999   但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。 ---------------------------*/// 断点后再次连接 $_SERVER['HTTP_RANGE'] 的值 bytes=4390912- list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); //if yes, download missing part str_replace($range, "-", $range);//这句干什么的呢。。。。 $size2=$size-1;//文件总字节数 $new_length=$size2-$range;//获取下次下载的长度 header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length");//输入总长 header("Content-Range: bytes $range$size2/$size");//Content-Range: bytes 4908618-4988927/4988928   95%的时候 } else {//第一次连接 $size2=$size-1; header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928 header("Content-Length: ".$size);//输出总长 } //打开文件 $fp=fopen("$file","rb"); //设置指针位置 fseek($fp,$range); //虚幻输出 while(!feof($fp)){ //设置文件最长执行时间 set_time_limit(0); print(fread($fp,1024*8));//输出文件 flush();//输出缓冲 ob_flush(); } fclose($fp); exit;
} dl_file_resume("1.zip");//同级目录的1.zip 文件 //---------------------------------------//不支持断点续传的文件下载。 //---------------------------------------downFile("1.zip"); function downFile($sFilePath)
{ if(file_exists($sFilePath)){ $aFilePath=explode("/",str_replace("\\","/",$sFilePath),$sFilePath); $sFileName=$aFilePath[count($aFilePath)-1]; $nFileSize=filesize ($sFilePath); header ("Content-Disposition: attachment; filename=" . $sFileName); header ("Content-Length: " . $nFileSize); header ("Content-type: application/octet-stream"); readfile($sFilePath); } else{ echo("文件不存在!"); }
}
?>

PHP----下载断点后续传相关推荐

  1. Akka实战:HTTP大文件断点上传、下载,秒传

    2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...

  2. java断点上传下载_java实现多线程断点续传,上传下载 分享

    程序采用的ftp工具, apache 的 commons-net-ftp-ftpclient package com.ftp; import java.io.File; import java.io. ...

  3. JS 超大文件上传解决方案:分片断点上传(一)

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  4. 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能

    网络编程学习(10)/ FTP项目(4) --文件下载和下载断点续存功能 服务端 `lib 文件夹下 main.py` 客户端 `client文件夹下 FTPClient.py 代码 interact ...

  5. 超大文件上传解决方案:分片断点上传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  6. asp.net 如何实现大文件断点上传功能?

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  7. java 断点上传_java HTTP文件断点上传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  8. 超大文件上传下载以及秒传、提速和限速方案完整(包含前后端)

    前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...

  9. 分析腾讯QQ网页文件断点上传

    关于文件的断点上传,网上的很多例子,有好有坏吧.最失望的是,在知网下载了十篇论文,感觉都是在瞎扯淡,目测是大学生的毕业设计吧,反正很失望. 主要是剖析了腾讯邮箱的文件上传,发现和我自己实现的大致相同, ...

最新文章

  1. springmvc开启事务_java面试题 一 :SpringMvc的流程
  2. 大流量的网站如何解决访问量的问题?
  3. C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响
  4. TCP/IP模型层次结构
  5. QT5对话框的中文字符串【乱码】 (error: C2001: 常量中有换行符)
  6. 【杂谈】有三AI知识星球最近都GAN了哪些内容?
  7. leetcode 446. Arithmetic Slices II - Subsequence | 446. 等差数列划分 II - 子序列(动态规划)
  8. 【机器学习】坐标下降法(Coordinate descent)
  9. C#实现写入文本文件内容功能
  10. 今天,给我妈打电话聊了我爸
  11. 开发类似vs的黑色风格_传闻:2020年《使命召唤》将是《黑色行动》重启作品
  12. 跳转到系统默认的Home
  13. Kafka笔记-Spring Boot消费者构造
  14. linux -rpm,linux 的rpm命令
  15. java音频文件怎么打开_java 怎么读取音乐文件
  16. 计算机二级晓云是企业人力,全国计算机二级Ms-Office精选真题试卷
  17. react+spring 记录跨域问题的解决方法
  18. 北语在SemEval 2022释义建模任务上斩获佳绩
  19. 【MySQL】mysql中any,in,some,all的区别
  20. 英语微课-Speaking Confidently

热门文章

  1. python操作autocad2007绘制图形230201
  2. Django-46-request之GET获取数据
  3. 电脑右键新建没有txt文本
  4. 聚米优选:抖音网红主播怎么变现?他们如何赚钱?
  5. P2389 电脑班的裁员
  6. mysql5.7 win2003安装_mysql 5.7 win系统安装
  7. AAA企业信用评级的八大重要作用
  8. 千峰培训_前端_day03_3d旋转相册
  9. jq中 html append appendto
  10. 思考(七十一):Protobuf oneof 实现消息分发