准备

登陆Ucloud官网进入控制台,生成令牌:https://console.ucloud.cn/ufile/token

点击眼睛可查看公钥及私钥,需在下方文件中填入。

创建PHP文件

主调用文件

首先创建一个php后缀文件,自定义名称。

<?php
class File
{
    private $parameters = array();
    private $public_key;
    //公钥
    private $private_key;
    //私钥
    public function __construct($public_key, $private_key)
    {
        $this->public_key = $public_key;
        $this->private_key = $private_key;
        $this->parameters['Method'] = null;
        $this->parameters['Content-MD5'] = null;
        $this->parameters['Content-Types'] = null;
        $this->parameters['Expires'] = null;
    }
    public function getAllList($prefix = null)
    {
        $this->setMethod('get');
        $this->parameters['BucketPath'] = $this->CanonicalizedResource($this->parameters['Bucket']);
        $this->parameters['HttpHeader'] = ['Authorization: ' . $this->getSign($this->parameters)];
        return $this->getCurl($this->parameters['Bucket'] . '.cn-bj.ufileos.com/?listobjects&delimiter=/&prefix=' . $prefix);
    }
    public function UpdateFile($file, $filename)
    {
        $this->setMethod('put');
        //$filename = basename($file);
        $this->parameters['BucketPath'] = $this->CanonicalizedResource($this->parameters['Bucket'], $filename);
        $this->parameters['Content-Types'] = $this->GetFileMimeType($file);
        $this->parameters['HttpHeader'] = ['Authorization: ' . $this->getSign($this->parameters), 'Content-Type: ' . $this->GetFileMimeType($file), 'Expect:'];
        //print_r($this->parameters);exit;
        return $this->getCurl($this->parameters['Bucket'] . '.cn-bj.ufileos.com/' . $filename, file_get_contents($file));
    }
    public function FileDelete($file)
    {
        $this->setMethod('delete');
        $this->parameters['BucketPath'] = $this->CanonicalizedResource($this->parameters['Bucket'], $file);
        $this->parameters['HttpHeader'] = ['Authorization: ' . $this->getSign($this->parameters)];
        return $this->getCurl($this->parameters['Bucket'] . '.cn-bj.ufileos.com/' . $file);
    }
    private function setMethod($method)
    {
        $this->parameters['Method'] = strtoupper($method);
    }
    public function setBucketName($name)
    {
        $this->parameters['Bucket'] = $name;
    }
    public function setParameter($k, $v)
    {
        $this->parameters[$k] = $v;
    }
    public function getParameter($k)
    {
        return $this->parameters[$k];
    }
    private function CanonicalizedResource($bucket, $key = null)
    {
        return "/" . $bucket . "/" . $key;
    }
    private function getSign($parameters)
    {
        $signPars = "";
        $signPars .= $this->parameters['Method'] . "\n";
        $signPars .= $this->parameters['Content-MD5'] . "\n";
        $signPars .= $this->parameters['Content-Types'] . "\n";
        $signPars .= $this->parameters['Expires'] . "\n";
        $signPars .= $this->parameters['BucketPath'];
        //print_r(($signPars));exit;
        $sign = base64_encode(hash_hmac('sha1', $signPars, $this->private_key, true));
        //print_r($sign);exit;
        return "UCloud " . $this->public_key . ":" . $sign;
    }
    private function GetFileMimeType($filename)
    {
        $mimetype = "";
        $ext = "";
        $filename_component = explode(".", $filename);
        if (count($filename_component) >= 2) {
            $ext = "." . $filename_component[count($filename_component) - 1];
        }
        $mimetype_complete_map = ['.3dm' => 'x-world/x-3dmf', '.3dmf' => 'x-world/x-3dmf', '.a' => 'application/octet-stream', '.aab' => 'application/x-authorware-bin', '.aam' => 'application/x-authorware-map', '.aas' => 'application/x-authorware-seg', '.abc' => 'text/vnd.abc', '.acgi' => 'text/html', '.afl' => 'video/animaflex', '.ai' => 'application/postscript', '.aif' => 'audio/aiff', '.aifc' => 'audio/aiff', '.aiff' => 'audio/aiff', '.aim' => 'application/x-aim', '.aip' => 'text/x-audiosoft-intra', '.ani' => 'application/x-navi-animation', '.aos' => 'application/x-nokia-9000-communicator-add-on-software', '.aps' => 'application/mime', '.arc' => 'application/octet-stream', '.arj' => 'application/arj', '.art' => 'image/x-jg', '.asf' => 'video/x-ms-asf', '.asm' => 'text/x-asm', '.asp' => 'text/asp', '.asx' => 'application/x-mplayer2', '.au' => 'audio/basic', '.avi' => 'video/avi', '.avs' => 'video/avs-video', '.bcpio' => 'application/x-bcpio', '.bin' => 'application/octet-stream', '.bm' => 'image/bmp', '.bmp' => 'image/bmp', '.boo' => 'application/book', '.book' => 'application/book', '.boz' => 'application/x-bzip2', '.bsh' => 'application/x-bsh', '.bz' => 'application/x-bzip', '.bz2' => 'application/x-bzip2', '.c' => 'text/x-c', '.c++' => 'text/plain', '.cat' => 'application/vnd.ms-pki.seccat', '.cc' => 'text/x-c', '.ccad' => 'application/clariscad', '.cco' => 'application/x-cocoa', '.cdf' => 'application/cdf', '.cer' => 'application/pkix-cert', '.cha' => 'application/x-chat', '.chat' => 'application/x-chat', '.conf' => 'text/plain', '.cpio' => 'application/x-cpio', '.cpp' => 'text/x-c', '.cpt' => 'application/x-cpt', '.crl' => 'application/pkcs-crl', '.crt' => 'application/pkix-cert', '.csh' => 'application/x-csh', '.css' => 'text/css', '.cxx' => 'text/plain', '.dcr' => 'application/x-director', '.deepv' => 'application/x-deepv', '.def' => 'text/plain', '.der' => 'application/x-x509-ca-cert', '.dif' => 'video/x-dv', '.dir' => 'application/x-director', '.dl' => 'video/dl', '.doc' => 'application/msword', '.dot' => 'application/msword', '.dp' => 'application/commonground', '.drw' => 'application/drafting', '.dump' => 'application/octet-stream', '.dv' => 'video/x-dv', '.dvi' => 'application/x-dvi', '.dwf' => 'drawing/x-dwf', '.dwg' => 'application/acad', '.dxf' => 'application/dxf', '.dxr' => 'application/x-director', '.el' => 'text/x-script.elisp', '.elc' => 'application/x-elc', '.env' => 'application/x-envoy', '.eps' => 'application/postscript', '.es' => 'application/x-esrehber', '.etx' => 'text/x-setext', '.evy' => 'application/envoy', '.exe' => 'application/octet-stream', '.f' => 'text/plain', '.f77' => 'text/x-fortran', '.f90' => 'text/x-fortran', '.fdf' => 'application/vnd.fdf', '.fif' => 'image/fif', '.fli' => 'video/fli', '.flo' => 'image/florian', '.flx' => 'text/vnd.fmi.flexstor', '.fmf' => 'video/x-atomic3d-feature', '.for' => 'text/x-fortran', '.fpx' => 'image/vnd.fpx', '.frl' => 'application/freeloader', '.funk' => 'audio/make', '.g' => 'text/plain', '.g3' => 'image/g3fax', '.gif' => 'image/gif', '.gl' => 'video/gl', '.gsd' => 'audio/x-gsm', '.gsm' => 'audio/x-gsm', '.gsp' => 'application/x-gsp', '.gss' => 'application/x-gss', '.gtar' => 'application/x-gtar', '.gz' => 'application/x-gzip', '.gzip' => 'application/x-gzip', '.h' => 'text/plain', '.hdf' => 'application/x-hdf', '.help' => 'application/x-helpfile', '.hgl' => 'application/vnd.hp-hpgl', '.hh' => 'text/plain', '.hlb' => 'text/x-script', '.hlp' => 'application/hlp', '.hpg' => 'application/vnd.hp-hpgl', '.hpgl' => 'application/vnd.hp-hpgl', '.hta' => 'application/hta', '.htc' => 'text/x-component', '.htm' => 'text/html', '.html' => 'text/html', '.htmls' => 'text/html', '.htt' => 'text/webviewhtml', '.htx' => 'text/html', '.ice' => 'x-conference/x-cooltalk', '.ico' => 'image/x-icon', '.idc' => 'text/plain', '.ief' => 'image/ief', '.iefs' => 'image/ief', '.iges' => 'application/iges', '.igs' => 'application/iges', '.ima' => 'application/x-ima', '.imap' => 'application/x-httpd-imap', '.inf' => 'application/inf', '.ins' => 'application/x-internett-signup', '.ip' => 'application/x-ip2', '.isu' => 'video/x-isvideo', '.it' => 'audio/it', '.iv' => 'application/x-inventor', '.ivr' => 'i-world/i-vrml', '.ivy' => 'application/x-livescreen', '.jam' => 'audio/x-jam', '.java' => 'text/plain', '.jcm' => 'application/x-java-commerce', '.jfif' => 'image/jpeg', '.jfif-tbnl' => 'image/jpeg', '.jpe' => 'image/jpeg', '.jpeg' => 'image/jpeg', '.jpg' => 'image/jpeg', '.jps' => 'image/x-jps', '.js' => 'application/javascript', '.jut' => 'image/jutvision', '.kar' => 'audio/midi', '.ksh' => 'application/x-ksh', '.la' => 'audio/nspaudio', '.lam' => 'audio/x-liveaudio', '.latex' => 'application/x-latex', '.lha' => 'application/lha', '.lhx' => 'application/octet-stream', '.list' => 'text/plain', '.lma' => 'audio/nspaudio', '.log' => 'text/plain', '.lsp' => 'application/x-lisp', '.lst' => 'text/plain', '.ltx' => 'application/x-latex', '.lzh' => 'application/x-lzh', '.lzx' => 'application/lzx', '.m' => 'text/x-m', '.m1v' => 'video/mpeg', '.m2a' => 'audio/mpeg', '.m2v' => 'video/mpeg', '.m3u' => 'audio/x-mpequrl', '.man' => 'application/x-troff-man', '.map' => 'application/x-navimap', '.mar' => 'text/plain', '.mbd' => 'application/mbedlet', '.mc$' => 'application/x-magic-cap-package-1.0', '.mcd' => 'application/mcad', '.mcf' => 'image/vasa', '.mcp' => 'application/netmc', '.me' => 'application/x-troff-me', '.mht' => 'message/rfc822', '.mhtml' => 'message/rfc822', '.mid' => 'audio/midi', '.midi' => 'audio/midi', '.mif' => 'application/x-mif', '.mime' => 'www/mime', '.mjf' => 'audio/x-vnd.audioexplosion.mjuicemediafile', '.mjpg' => 'video/x-motion-jpeg', '.mm' => 'application/base64', '.mod' => 'audio/mod', '.moov' => 'video/quicktime', '.mov' => 'video/quicktime', '.movie' => 'video/x-sgi-movie', '.mp2' => 'audio/mpeg', '.mp3' => 'audio/mpeg3', '.mpa' => 'video/mpeg', '.mpc' => 'application/x-project', '.mpe' => 'video/mpeg', '.mpeg' => 'video/mpeg', '.mpg' => 'video/mpeg', '.mpga' => 'audio/mpeg', '.mpp' => 'application/vnd.ms-project', '.mpt' => 'application/x-project', '.mpv' => 'application/x-project', '.mpx' => 'application/x-project', '.mrc' => 'application/marc', '.ms' => 'application/x-troff-ms', '.mv' => 'video/x-sgi-movie', '.my' => 'audio/make', '.mzz' => 'application/x-vnd.audioexplosion.mzz', '.nap' => 'image/naplps', '.naplps' => 'image/naplps', '.nc' => 'application/x-netcdf', '.ncm' => 'application/vnd.nokia.configuration-message', '.nif' => 'image/x-niff', '.niff' => 'image/x-niff', '.nix' => 'application/x-mix-transfer', '.nsc' => 'application/x-conference', '.nvd' => 'application/x-navidoc', '.o' => 'application/octet-stream', '.oda' => 'application/oda', '.omc' => 'application/x-omc', '.omcd' => 'application/x-omcdatamaker', '.omcr' => 'application/x-omcregerator', '.p' => 'text/x-pascal', '.p10' => 'application/pkcs10', '.p12' => 'application/pkcs-12', '.p7a' => 'application/x-pkcs7-signature', '.p7c' => 'application/pkcs7-mime', '.p7m' => 'application/pkcs7-mime', '.p7r' => 'application/x-pkcs7-certreqresp', '.p7s' => 'application/pkcs7-signature', '.part' => 'application/pro_eng', '.pas' => 'text/pascal', '.pbm' => 'image/x-portable-bitmap', '.pcl' => 'application/x-pcl', '.pct' => 'image/x-pict', '.pcx' => 'image/x-pcx', '.pdb' => 'chemical/x-pdb', '.pdf' => 'application/pdf', '.pfunk' => 'audio/make', '.pgm' => 'image/x-portable-graymap', '.pic' => 'image/pict', '.pict' => 'image/pict', '.pko' => 'application/vnd.ms-pki.pko', '.pl' => 'text/plain', '.plx' => 'application/x-pixclscript', '.pm' => 'image/x-xpixmap', '.pm4' => 'application/x-pagemaker', '.pm5' => 'application/x-pagemaker', '.png' => 'image/png', '.pnm' => 'application/x-portable-anymap', '.pot' => 'application/mspowerpoint', '.pov' => 'model/x-pov', '.ppa' => 'application/vnd.ms-powerpoint', '.ppm' => 'image/x-portable-pixmap', '.pps' => 'application/mspowerpoint', '.ppt' => 'application/mspowerpoint', '.ppz' => 'application/mspowerpoint', '.pre' => 'application/x-freelance', '.prt' => 'application/pro_eng', '.ps' => 'application/postscript', '.psd' => 'application/octet-stream', '.pvu' => 'paleovu/x-pv', '.pwz' => 'application/vnd.ms-powerpoint', '.py' => 'text/x-script.phyton', '.pyc' => 'application/x-bytecode.python', '.qcp' => 'audio/vnd.qcelp', '.qd3' => 'x-world/x-3dmf', '.qd3d' => 'x-world/x-3dmf', '.qif' => 'image/x-quicktime', '.qt' => 'video/quicktime', '.qtc' => 'video/x-qtc', '.qti' => 'image/x-quicktime', '.qtif' => 'image/x-quicktime', '.ra' => 'audio/x-pn-realaudio', '.ram' => 'audio/x-pn-realaudio', '.ras' => 'application/x-cmu-raster', '.rast' => 'image/cmu-raster', '.rexx' => 'text/x-script.rexx', '.rf' => 'image/vnd.rn-realflash', '.rgb' => 'image/x-rgb', '.rm' => 'audio/x-pn-realaudio', '.rmi' => 'audio/mid', '.rmm' => 'audio/x-pn-realaudio', '.rmp' => 'audio/x-pn-realaudio', '.rng' => 'application/ringing-tones', '.rnx' => 'application/vnd.rn-realplayer', '.roff' => 'application/x-troff', '.rp' => 'image/vnd.rn-realpix', '.rpm' => 'audio/x-pn-realaudio-plugin', '.rt' => 'text/richtext', '.rtf' => 'application/rtf', '.rtx' => 'application/rtf', '.rv' => 'video/vnd.rn-realvideo', '.s' => 'text/x-asm', '.s3m' => 'audio/s3m', '.saveme' => 'application/octet-stream', '.sbk' => 'application/x-tbook', '.sdml' => 'text/plain', '.sdp' => 'application/sdp', '.sdr' => 'application/sounder', '.sea' => 'application/sea', '.set' => 'application/set', '.sgm' => 'text/sgml', '.sgml' => 'text/sgml', '.sh' => 'application/x-sh', '.shar' => 'application/x-shar', '.shtml' => 'text/html', '.sid' => 'audio/x-psid', '.sit' => 'application/x-sit', '.skd' => 'application/x-koan', '.skm' => 'application/x-koan', '.skp' => 'application/x-koan', '.skt' => 'application/x-koan', '.sl' => 'application/x-seelogo', '.smi' => 'application/smil', '.smil' => 'application/smil', '.snd' => 'audio/basic', '.sol' => 'application/solids', '.spl' => 'application/futuresplash', '.spr' => 'application/x-sprite', '.sprite' => 'application/x-sprite', '.src' => 'application/x-wais-source', '.ssi' => 'text/x-server-parsed-html', '.ssm' => 'application/streamingmedia', '.sst' => 'application/vnd.ms-pki.certstore', '.step' => 'application/step', '.stl' => 'application/sla', '.stp' => 'application/step', '.sv4cpio' => 'application/x-sv4cpio', '.sv4crc' => 'application/x-sv4crc', '.svf' => 'image/vnd.dwg', '.svr' => 'application/x-world', '.swf' => 'application/x-shockwave-flash', '.svg' => 'image/svg+xml', '.t' => 'application/x-troff', '.talk' => 'text/x-speech', '.tar' => 'application/x-tar', '.tbk' => 'application/toolbook', '.tcl' => 'application/x-tcl', '.tcsh' => 'text/x-script.tcsh', '.tex' => 'application/x-tex', '.texi' => 'application/x-texinfo', '.texinfo' => 'application/x-texinfo', '.text' => 'text/plain', '.tgz' => 'application/x-compressed', '.tif' => 'image/tiff', '.tiff' => 'image/tiff', '.tr' => 'application/x-troff', '.tsi' => 'audio/tsp-audio', '.tsp' => 'application/dsptype', '.tsv' => 'text/tab-separated-values', '.turbot' => 'image/florian', '.txt' => 'text/plain', '.uil' => 'text/x-uil', '.uni' => 'text/uri-list', '.unis' => 'text/uri-list', '.unv' => 'application/i-deas', '.uri' => 'text/uri-list', '.uris' => 'text/uri-list', '.ustar' => 'application/x-ustar', '.uu' => 'application/octet-stream', '.uue' => 'text/x-uuencode', '.vcd' => 'application/x-cdlink', '.vcs' => 'text/x-vcalendar', '.vda' => 'application/vda', '.vdo' => 'video/vdo', '.vew' => 'application/groupwise', '.viv' => 'video/vivo', '.vivo' => 'video/vivo', '.vmd' => 'application/vocaltec-media-desc', '.vmf' => 'application/vocaltec-media-file', '.voc' => 'audio/voc', '.vos' => 'video/vosaic', '.vox' => 'audio/voxware', '.vqe' => 'audio/x-twinvq-plugin', '.vqf' => 'audio/x-twinvq', '.vql' => 'audio/x-twinvq-plugin', '.vrml' => 'application/x-vrml', '.vrt' => 'x-world/x-vrt', '.vsd' => 'application/x-visio', '.vst' => 'application/x-visio', '.vsw' => 'application/x-visio', '.w60' => 'application/wordperfect6.0', '.w61' => 'application/wordperfect6.1', '.w6w' => 'application/msword', '.wav' => 'audio/wav', '.wb1' => 'application/x-qpro', '.wbmp' => 'image/vnd.wap.wbmp', '.web' => 'application/vnd.xara', '.wiz' => 'application/msword', '.wk1' => 'application/x-123', '.wmf' => 'windows/metafile', '.wmlc' => 'application/vnd.wap.wmlc', '.wmls' => 'text/vnd.wap.wmlscript', '.wmlsc' => 'application/vnd.wap.wmlscriptc', '.word' => 'application/msword', '.wp' => 'application/wordperfect', '.wp5' => 'application/wordperfect', '.wp6' => 'application/wordperfect', '.wpd' => 'application/wordperfect', '.wq1' => 'application/x-lotus', '.wri' => 'application/mswrite', '.wrl' => 'application/x-world', '.wrz' => 'model/vrml', '.wsc' => 'text/scriplet', '.wsrc' => 'application/x-wais-source', '.wtk' => 'application/x-wintalk', '.xbm' => 'image/x-xbitmap', '.xdr' => 'video/x-amt-demorun', '.xgz' => 'xgl/drawing', '.xif' => 'image/vnd.xiff', '.xl' => 'application/excel', '.xla' => 'application/excel', '.xlb' => 'application/excel', '.xlc' => 'application/excel', '.xld' => 'application/excel', '.xlk' => 'application/excel', '.xll' => 'application/excel', '.xlm' => 'application/excel', '.xls' => 'application/excel', '.xlt' => 'application/excel', '.xlv' => 'application/excel', '.xlw' => 'application/excel', '.xm' => 'audio/xm', '.xml' => 'application/xml', '.xmz' => 'xgl/movie', '.xpix' => 'application/x-vnd.ls-xpix', '.x-png' => 'image/png', '.xsr' => 'video/x-amt-showrun', '.xwd' => 'image/x-xwd', '.xyz' => 'chemical/x-pdb', '.zip' => 'application/zip', '.zoo' => 'application/octet-stream', '.zsh' => 'text/x-script.zsh', '.apk' => 'application/vnd.android.package-archive', '.ipa' => 'application/octet-stream.ipa', '.flv' => 'video/x-flv', '.mp4' => 'video/mp4', '.m3u8' => 'application/x-mpegURL', '.ts' => 'video/MP2T', '.3gp' => 'video/3gpp', '.wmv' => 'video/x-ms-wmv'];
        if (array_key_exists($ext, $mimetype_complete_map)) {
            $mimetype = $mimetype_complete_map[$ext];
        } else {
            if (function_exists('mime_content_type')) {
                $mimetype = mime_content_type($filename);
            } else {
                if (function_exists('finfo_file')) {
                    $finfo = finfo_open(FILEINFO_MIME_TYPE);
                    // 返回 mime 类型
                    $mimetype = finfo_file($finfo, $filename);
                    finfo_close($finfo);
                } else {
                    return 'application/octet-stream';
                }
            }
        }
        return $mimetype;
    }
    private function getCurl($url, $post = null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->parameters['Method']);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->parameters['HttpHeader']);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($ch);
        curl_close($ch);
        return $ret;
    }
}
页面文件
  • 修改require值为刚刚创建的文件全称
  • 在$file中依次填入公钥及私钥
  • 设置对象存储名称
<?php
error_reporting(0);
require 'Config.php';
$file = new File('请填写TOKEN_开头公钥', '请填写私钥');
$file->setBucketName('请填写对象存储名称'); //设置对象存储名
$dir = $_GET['dir'];
$arr = json_decode($file->getAllList($dir), true);
?>
<html lang="zh-CN"><head><style class="vjs-styles-defaults">
      .video-js {
        width: 300px;
        height: 150px;
      }
      .vjs-fluid {
        padding-top: 56.25%
      }
    </style>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, Chrome=1">
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,viewport-fit=cover">
    <title>闲云网盘 - <?php
echo isset($_GET['dir']) ? $dir : '/';
?></title>
    <link href="//s.pstatp.com/cdn/expire-3-M/mdui/0.4.2/css/mdui.min.css" rel="stylesheet">
    <link href="//s.pstatp.com/cdn/expire-3-M/??video.js/7.3.0/video-js.min.css,baguettebox.js/1.11.0/baguetteBox.min.css" rel="stylesheet">
    <style>
    body{background-color:#f2f5fa}.nexmoe-item{margin:15px 0 !important;padding:15px !important;border-radius:5px;background-color:#fff;-webkit-box-shadow:0 .5em 3em rgba(161,177,204,.4);box-shadow:0 .5em 3em rgba(161,177,204,.4);background-color:#fff}.mdui-img-fluid,.mdui-video-fluid{border-radius:5px;border:1px solid #eee}.mdui-list{padding:0}.mdui-list-item{margin:0 !important;border-bottom:1px solid #eee;line-height:2}.mdui-list-item:last-child{margin-bottom:0 !important,}.mdui-toolbar{width:auto}.mdui-appbar .mdui-toolbar{height:56px;font-size:16px}.mdui-toolbar>*{padding:0 6px;margin:0 2px}.mdui-toolbar>.mdui-typo-headline{padding:0 16px 0 0}.mdui-toolbar>i{padding:0}.mdui-toolbar h3.title{padding:0 16px;line-height:30px;border-radius:30px;border:1px solid #eee;opacity:1;background-color:#1e89f2;color:#ffff}.mdui-toolbar>a:hover,a.mdui-typo-headline,a.active{opacity:1}.mdui-list>.th{background-color:initial}.mdui-list-item>a{width:100%;line-height:48px}.mdui-toolbar>a{padding:0 16px;line-height:30px;border-radius:30px;border:1px solid #eee}.mdui-toolbar>a:-child{opacity:1;background-color:#1e89f2;color:#ffff}@media screen and (max-width:980px){.mdui-list-item .mdui-text-right{display:none}.mdui-container{width:100% !important;margin:0}.mdui-toolbar>a:last-child,.mdui-toolbar>.mdui-typo-headline,.mdui-toolbar>i:first-child{display:block}}#main-page{cursor:pointer}.nav-a{text-decoration:none;color:#333}.nav-a:hover{text-decoration:underline}.file{width:100%;display:flex;align-items:center}.file a{color:unset;width:100%}#text-input,#close{display:none}#text-input{width:40%}#playerContainer{position:relative;background-color:#000;display:none;padding:10px}.close-icon{color:#fff}span.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:999}.mask{display:block;-webkit-user-select:none;-ms-user-select:none;-webkit-transition:opacity .5s ease;transition:opacity .5s ease;background-color:rgba(0,0,0,.8);position:fixed;overflow:hidden;top:0;left:0;width:100%;height:100%}.video-js{width:100% !important;height:100% !important;position:relative !important}.vjs-big-play-button{margin-top:-130px !important}.video-js .vjs-text-track-display>div>div>div{font-size:24px !important;line-height:36px !important;padding:5px !important;background:transparent !important;text-shadow:1px 1px 2px #000;display:inline-block !important}.video-js .vjs-big-play-button{font-size:2.5em;line-height:2.5em;height:2.5em;width:2.5em;-webkit-border-radius:2.5em;-moz-border-radius:2.5em;border-radius:2.5em;background-color:#73859f;background-color:rgba(115,133,159,.5);border-width:.15em;margin-top:-1.25em !important;margin-left:-1.75em}.vjs-big-play-button .vjs-icon-placeholder{font-size:1.63em}.vjs-loading-spinner{font-size:2.5em;width:2em;height:2em;border-radius:1em;margin-top:-1em;margin-left:-1.5em}.vjs-paused .vjs-big-play-button,.vjs-paused.vjs-has-started .vjs-big-play-button{display:block}.video-js.vjs-playing .vjs-tech{pointer-events:auto}.video-js .vjs-time-control{display:block}.video-js .vjs-remaining-time{display:none}.player-row{text-align:right;border-bottom:1px solid #2b333fb3}.player-title{color:#fff;float:left;line-height:36px;overflow:auto;white-space:normal;text-overflow:ellipsis;width:50vw;text-align:left}.prev-next{display:none}.prev-next>.baguetteBox-button:before{content:"";position:absolute;top:-180px;width:100px;bottom:-180px}.prev-next>#previous-button{left:0 !important;top:calc(40%)}.prev-next>#previous-button:before{left:-50px}.prev-next>#next-button{right:0 !important;top:calc(40%)}.prev-next>#next-button:before{right:-50px}@media screen and (max-width:980px){.player-row{display:none}}
    </style>
</head>
<body class="mdui-loaded">
<div class="container mdui-container">
<div class="mdui-container-fluid"><div class="mdui-toolbar nexmoe-item nav"><i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-blue" id="main-page" onclick="goto(rootPath)">home</i><span id="path"><span>
<?php
echo isset($_GET['dir']) ? $dir : '/';
?>
</span></span><div class="mdui-toolbar-spacer"></div><input type="text" id="text-input" class="mdui-textfield-input" oninput="search(this)" placeholder="请输入关键字"><button type="button" id="close" class="mdui-textfield-close mdui-btn mdui-btn-icon"><i class="mdui-icon material-icons">close</i></button></div></div>
<div class="mdui-container-fluid">
<div class="list-wrapper nexmoe-item">
	<div class="list-header"><div class="file mdui-list-item th"><span class="name mdui-col-xs-12 mdui-col-sm-7" onclick="view('name')">列表</span><span class="time mdui-col-sm-3 mdui-text-right" onclick="view('date')">时间</span><span class="size mdui-col-sm-2 mdui-text-right" onclick="view('size')">大小</span></div></div><div id="file-list">
<?php
//返回上一层
echo (isset($_GET['dir']) ? '<div class="row file-wrapper mdui-list-item mdui-ripple"><div class="file"><i class="mdui-icon material-icons">folder</i><a href="javascript:;" onclick="history.go(-1)"><span class="name mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">返回上一层</span><span class="time mdui-col-sm-3 mdui-text-right"></span><span class="size mdui-col-sm-2 mdui-text-right"></span></a></div></div>' : null);
//文件
foreach ($arr['Contents'] as $val) {
	echo '<div class="row file-wrapper mdui-list-item mdui-ripple"><div class="file"><i class="mdui-icon material-icons">insert_drive_file</i><a href="https://file.api.ym68.cc/' . $val['Key'] . ' "target="_blank"><span class="name mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">' . (isset($_GET['dir']) ? substr($val['Key'], strlen($dir)) : $val['Key']) . '</span><span class="time mdui-col-sm-3 mdui-text-right">' . date("Y-m-d H:i:s",$val['LastModified']) . '</span><span class="size mdui-col-sm-2 mdui-text-right">' . round($val['Size']/1024/1024,2) . ' Mb</span></a></div></div>';
}
//目录
foreach ($arr['CommonPrefixes'] as $val) {
	echo '<div class="row file-wrapper mdui-list-item mdui-ripple"><div class="file"><i class="mdui-icon material-icons">folder_open</i><a href="./list.php?dir=' . $val['Prefix'] . '"><span class="name mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">' . $val['Prefix'] . '</span><span class="time mdui-col-sm-3 mdui-text-right">' . $val['LastModified'] . '</span><span class="size mdui-col-sm-2 mdui-text-right"></span></a></div></div>';
}
?>
    </div></div></div>
<script src="//s.pstatp.com/cdn/expire-3-M/??mdui/0.4.0/js/mdui.min.js,video.js/7.3.0/video.min.js,video.js/7.3.0/lang/zh-CN.js,baguettebox.js/1.11.0/baguetteBox.min.js"></script>
<div role="dialog" id="baguetteBox-overlay"><div id="baguetteBox-slider"></div><button type="button" id="previous-button" aria-label="Previous" class="baguetteBox-button"><svg width="44" height="60"><polyline points="30 10 10 30 30 50" stroke="rgba(255,255,255,0.5)" stroke-width="4" stroke-linecap="butt" fill="none" stroke-linejoin="round"></polyline></svg></button><button type="button" id="next-button" aria-label="Next" class="baguetteBox-button"><svg width="44" height="60"><polyline points="14 10 34 30 14 50" stroke="rgba(255,255,255,0.5)" stroke-width="4" stroke-linecap="butt" fill="none" stroke-linejoin="round"></polyline></svg></button><button type="button" id="close-button" aria-label="Close" class="baguetteBox-button"><svg width="30" height="30"><g stroke="rgb(160,160,160)" stroke-width="4"><line x1="5" y1="5" x2="25" y2="25"></line><line x1="5" y1="25" x2="25" y2="5"></line></g></svg></button></div>
效果:

文件及目录显示效果:

目录内容显示效果:


该文章采用「CC 协议」,转载必须注明作者和本文链接.
分类: PHP