Server IP : 104.21.38.3 / Your IP : 172.71.81.181 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/panel/class_v2/ |
Upload File : |
#coding: utf-8 # +------------------------------------------------------------------- # | aaPanel # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved. # +------------------------------------------------------------------- # | Author: hwliang <2020-05-18> # +------------------------------------------------------------------- # +------------------------------------------------------------------- # | 流媒体模块 # +------------------------------------------------------------------- import os,sys,re import mimetypes import public from BTPanel import Response def get_buff_size(file_size): buff_size = 2097152 if file_size > 1073741824: buff_size = 4194304 return buff_size def partial_response(path, start, end=None): if not os.path.exists(path): return Response("file not fount!",404) file_size = os.path.getsize(path) buff_size = get_buff_size(file_size) if end is None: end = start + buff_size - 1 end = min(end, file_size - 1) end = min(end, start + buff_size - 1) length = end - start + 1 with open(path, 'rb') as fd: fd.seek(start) bytes = fd.read(length) assert len(bytes) == length response = Response(bytes,206,mimetype=mimetypes.guess_type(path)[0],direct_passthrough=True,) response.headers.add('Content-Range', 'bytes {0}-{1}/{2}'.format(start, end, file_size,),) response.headers.add('Accept-Ranges', 'bytes') return response def get_range(request): range = request.headers.get('Range') m = None if range: m = re.match(r'bytes=(?P<start>\d+)-(?P<end>\d+)?', range) if m: start = m.group('start') end = m.group('end') start = int(start) if end is not None: end = int(end) return start, end else: return 0, None