风暴烈酒辰

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 1         $file = "我是一个路径";
 2         if(empty($file)){
 3             $this->displayJson(Ap_Constants::ERROR_EMPTY);
 4         }
 5 
 6         
 7         $file_name = $file['name'];
 8         $size = $file['size'];
 9         //中文需要转码
10         $path = iconv('UTF-8', 'GB2312', $file['path']);
11         $size = $filesize=filesize($path);
12 
13    
14         $fm = @fopen ( $path, 'rb' );
15         $begin = 0;
16         $end = $size - 1;
17          
18         if (isset ( $_SERVER ['HTTP_RANGE'] )) {
19             if (preg_match ( '/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER ['HTTP_RANGE'], $matches )) {
20                 // 读取文件,起始节点
21                 $begin = intval ( $matches [1] );
22          
23                 // 读取文件,结束节点
24                 if (! empty ( $matches [2] )) {
25                     $end = intval ( $matches [2] );
26                 }
27             }
28         }
29          
30         if (isset ( $_SERVER ['HTTP_RANGE'] )) {
31             header ( 'HTTP/1.1 206 Partial Content' );
32         } else {
33             header ( 'HTTP/1.1 200 OK' );
34         }
35          
36         Header("Content-type: application/vnd.android.package-archive");
37         header ( 'Cache-Control: public, must-revalidate, max-age=0' );
38         header ( 'Pragma: no-cache' );
39         header ( 'Accept-Ranges: bytes' );
40         header ( 'Content-Length:' . (($end - $begin) + 1) );
41          
42         if (isset ( $_SERVER ['HTTP_RANGE'] )) {
43             header ( "Content-Range: bytes $begin-$end/$size" );
44         }
45          
46         header ( "Content-Disposition: inline; filename=$file_name" );
47         header ( "Content-Transfer-Encoding: binary" );
48          
49         $cur = $begin;
50          
51         // 定位指针
52         fseek ( $fm, $begin, 0 );
53         ob_clean();
54         flush();
55         while ( ! feof ( $fm ) && $cur <= $end && (connection_status () == 0) ) {
56             print fread ( $fm, min ( 1024 * 16, ($end - $cur) + 1 ) );
57             $cur += 1024 * 16;
58         }
59         exit(0);

 

posted on 2019-09-03 11:25  风暴烈酒辰  阅读(573)  评论(0编辑  收藏  举报