PHP----下载断点后续传
代码:
<?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----下载断点后续传相关推荐
- Akka实战:HTTP大文件断点上传、下载,秒传
2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...
- java断点上传下载_java实现多线程断点续传,上传下载 分享
程序采用的ftp工具, apache 的 commons-net-ftp-ftpclient package com.ftp; import java.io.File; import java.io. ...
- JS 超大文件上传解决方案:分片断点上传(一)
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能
网络编程学习(10)/ FTP项目(4) --文件下载和下载断点续存功能 服务端 `lib 文件夹下 main.py` 客户端 `client文件夹下 FTPClient.py 代码 interact ...
- 超大文件上传解决方案:分片断点上传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- asp.net 如何实现大文件断点上传功能?
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- java 断点上传_java HTTP文件断点上传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- 超大文件上传下载以及秒传、提速和限速方案完整(包含前后端)
前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...
- 分析腾讯QQ网页文件断点上传
关于文件的断点上传,网上的很多例子,有好有坏吧.最失望的是,在知网下载了十篇论文,感觉都是在瞎扯淡,目测是大学生的毕业设计吧,反正很失望. 主要是剖析了腾讯邮箱的文件上传,发现和我自己实现的大致相同, ...
最新文章
- springmvc开启事务_java面试题 一 :SpringMvc的流程
- 大流量的网站如何解决访问量的问题?
- C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响
- TCP/IP模型层次结构
- QT5对话框的中文字符串【乱码】 (error: C2001: 常量中有换行符)
- 【杂谈】有三AI知识星球最近都GAN了哪些内容?
- leetcode 446. Arithmetic Slices II - Subsequence | 446. 等差数列划分 II - 子序列(动态规划)
- 【机器学习】坐标下降法(Coordinate descent)
- C#实现写入文本文件内容功能
- 今天,给我妈打电话聊了我爸
- 开发类似vs的黑色风格_传闻:2020年《使命召唤》将是《黑色行动》重启作品
- 跳转到系统默认的Home
- Kafka笔记-Spring Boot消费者构造
- linux -rpm,linux 的rpm命令
- java音频文件怎么打开_java 怎么读取音乐文件
- 计算机二级晓云是企业人力,全国计算机二级Ms-Office精选真题试卷
- react+spring 记录跨域问题的解决方法
- 北语在SemEval 2022释义建模任务上斩获佳绩
- 【MySQL】mysql中any,in,some,all的区别
- 英语微课-Speaking Confidently