请选择 进入手机版 | 继续访问电脑版

爱Q粉丝网

搜索
查看: 77|回复: 0
收起左侧

[JS特效] 关于蓝奏云免登陆在线上传示例方法

[复制链接]

282

主题

290

帖子

1120

积分

管理员

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

积分
1120

灌水之王优秀版主荣誉管理论坛元老

发表于 2020-9-12 01:37:56 | 显示全部楼层 |阅读模式
由于蓝奏云增加了登录验证,已经不能使用账号密码的方式登录了,请自行抓取 cookie 进行使用(cookie 有效期大概是 20 天左右)。

api代码:
  1. <?php
  2. header('Access-Control-Allow-Origin:*');
  3. header('Content-type:application/json; charset=utf-8');
  4. error_reporting(0);
  5. $Lanzou = new Lanzou();
  6. !empty($_POST['type']) ? $type = $_POST['type'] : exit($Lanzou->error("请勿直接访问!"));
  7. switch ($type){
  8.     case "upload":
  9.         $array= array("doc", "docx", "zip", "rar", "apk", "ipa", "txt", "exe", "7z", "e", "z", "ct", "ke", "cetrainer", "db", "tar", "pdf", "w3x", "epub", "mobi", "azw", "azw3", "osk", "osz", "xpa", "cpk", "lua", "jar", "dmg", "ppt", "pptx", "xls", "xlsx", "mp3", "ipa", "iso", "img", "gho", "ttf", "ttc", "txf", "dwg", "bat", "dll");
  10.         $tmp=explode(".",$_FILES['file']['name']);
  11.         $file = $_FILES["file"]["tmp_name"];
  12.         $extension=end($tmp);
  13.         if($_FILES['file']['error']>0 || $file == ""){
  14.             exit($Lanzou->error("文件损坏!"));
  15.         }else{
  16.             if (($_FILES['file']['size']<100*1024*1024) && in_array($extension, $array)){
  17.                 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
  18.                 $files = "upload/" . $_FILES["file"]["name"];
  19.             }
  20.             echo json_encode($Lanzou->upload_file($files));
  21.             unlink($files);
  22.         }
  23.         break;
  24.     case "del_file":
  25.         !empty($_POST['id']) ? $id = $_POST['id'] : exit($Lanzou->error("请传入文件ID!"));
  26.         echo json_encode($Lanzou->del_file($id));
  27.         break;
  28.     default:
  29.         $Lanzou->error("请勿直接访问!");
  30. }

  31. /**
  32. * Class Lanzou
  33. * 蓝奏云在线免登陆上传
  34. */
  35. class Lanzou
  36. {
  37.     private $config = [
  38.         'cookie' => 'phpdisk_info=ADVXZQdjATsENFMGEKOAAyV2UHMQFpBDVTNlw0Uj0CYlZmCWdQYw47BWJTYwMyUzQHNgBhVjkCYQBgDl0HbFQ3AjQAaVQxU2gGYVBjCj0AN1dg;', //此处填写自己抓取的cookie
  39.         'upload_file' => 'https://pc.woozooo.com/fileup.php',
  40.         'del_file' => 'https://pc.woozooo.com/doupload.php',
  41.     ];

  42.     public function upload_file($file)
  43.     {
  44.         $upload = [
  45.             'post' => [
  46.                 'task' => 1,
  47.                 'upload_file' => new CURLFile(realpath($file))
  48.             ],
  49.             'cookie' => $this->config['cookie']
  50.         ];
  51.         $json = json_decode($this->get_curl($this->config['upload_file'], $upload));
  52.         if ($json->zt == 1) {
  53.             return [
  54.                 "code" => 1,
  55.                 "msg" => $json->info,
  56.                 "url" => $json->text[0]->is_newd . "/" . $json->text[0]->f_id,
  57.                 "name" => $json->text[0]->name_all,
  58.                 "size" => $json->text[0]->size,
  59.                 "id" => $json->text[0]->id
  60.             ];
  61.         } else {
  62.             return [
  63.                 "code" => -1,
  64.                 "msg" => $json->info
  65.             ];
  66.         }
  67.     }

  68.     public function del_file($id)
  69.     {
  70.         $del = [
  71.             "post" => [
  72.                 'task' => 6,
  73.                 'file_id' => $id
  74.             ],
  75.             'cookie' => $this->config['cookie']
  76.         ];
  77.         $json = json_decode($this->get_curl($this->config['del_file'], $del));
  78.         if ($json->zt == 1) {
  79.             return [
  80.                 "code" => 1,
  81.                 "msg" => $json->info
  82.             ];
  83.         }else{
  84.             return [
  85.                 "code" => -1,
  86.                 "msg" => $json->info
  87.             ];
  88.         }
  89.     }

  90.     public function get_curl($url, $paras = array())
  91.     {
  92.         $ch = curl_init();
  93.         curl_setopt($ch, CURLOPT_URL, $url);
  94.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  95.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  96.         if ($paras['httpheader']) { // 请求头
  97.             $httpheader = $paras['httpheader'];
  98.         } else {
  99.             $httpheader[] = "Accept:*/*";
  100.             $httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
  101.             $httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
  102.             $httpheader[] = "Connection:close";
  103.         }
  104.         curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
  105.         if ($paras['ctime']) { // 连接超时
  106.             curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $paras['ctime']);
  107.         }
  108.         if ($paras['rtime']) { // 读取超时
  109.             curl_setopt($ch, CURLOPT_TIMEOUT, $paras['rtime']);
  110.         }
  111.         if ($paras['post']) {
  112.             curl_setopt($ch, CURLOPT_POST, 1);
  113.             curl_setopt($ch, CURLOPT_POSTFIELDS, $paras['post']);
  114.         }
  115.         if ($paras['header']) {
  116.             curl_setopt($ch, CURLOPT_HEADER, true);
  117.         }
  118.         if ($paras['cookie']) {
  119.             curl_setopt($ch, CURLOPT_COOKIE, $paras['cookie']);
  120.         }
  121.         if ($paras['refer']) {
  122.             if ($paras['refer'] == 1) {
  123.                 curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f=');
  124.             } else {
  125.                 curl_setopt($ch, CURLOPT_REFERER, $paras['refer']);
  126.             }
  127.         }
  128.         if ($paras['ua']) {
  129.             curl_setopt($ch, CURLOPT_USERAGENT, $paras['ua']);
  130.         } else {
  131.             curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
  132.         }
  133.         if ($paras['nobody']) {
  134.             curl_setopt($ch, CURLOPT_NOBODY, 1);
  135.         }
  136.         curl_setopt($ch, CURLOPT_ENCODING, "gzip");
  137.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  138.         $ret = curl_exec($ch);
  139.         curl_close($ch);
  140.         return $ret;
  141.     }

  142.     public function error($msg)
  143.     {
  144.         echo json_encode([
  145.             "code" => -1,
  146.             "msg" => $msg
  147.         ], 320);
  148.     }
  149. }
复制代码
HTML代码:
  1. <!doctype html>
  2. <html lang="zh">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport"
  6.           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8.     <title>Document</title>
  9.     <link rel="stylesheet" href="//ku.oioweb.cn/LayUI/layui/css/layui.css">
  10.     <script src="//ku.oioweb.cn/jQuery/3.4.1/jquery.min.js"></script>
  11.     <script src="//ku.oioweb.cn/LayUI/layui/layui.all.js"></script>
  12.     <script src="//ku.oioweb.cn/clipboard.js/2.0.4/clipboard.min.js"></script>
  13. </head>
  14. <body>
  15. <div class="layui-upload-drag" id="testList" style="width: 100%;padding: 51px 0;border: none;">
  16.     <i class="layui-icon"></i>
  17.     <p>点击上传,或将文件拖拽到此处</p>
  18. </div>


  19. <div class="layui-upload">
  20.     <div class="layui-upload-list" style="text-align: center;">
  21.         <table class="layui-table">
  22.             <thead>
  23.             <tr>
  24.                 <th>文件名</th>
  25.                 <th>大小</th>
  26.                 <th>状态</th>
  27.                 <th>操作</th>
  28.             </tr>
  29.             </thead>
  30.             <tbody id="demoList"></tbody>
  31.         </table>
  32.     </div>
  33.     <button type="button" class="layui-btn layui-btn-fluid layui-btn-radius" id="testListAction">开始上传</button>
  34. </div>
  35. <script>
  36.     ;!function () {
  37.         var upload = layui.upload;
  38.         var demoListView = $('#demoList')
  39.             , uploadListIns = upload.render({
  40.             elem: '#testList'
  41.             ,
  42.             url: 'api.php'
  43.             ,
  44.             accept: 'file'
  45.             ,
  46.             data: {type: "upload"}
  47.             ,
  48.             size: 1024 * 1024 * 100
  49.             ,
  50.             exts: 'doc|docx|zip|rar|apk|ipa|txt|exe|7z|e|z|ct|ke|cetrainer|db|tar|pdf|w3x|epub|mobi|azw|azw3|osk|osz|xpa|cpk|lua|jar|dmg|ppt|pptx|xls|xlsx|mp3|ipa|iso|img|gho|ttf|ttc|txf|dwg|bat|dll'
  51.             ,
  52.             multiple: true
  53.             ,
  54.             auto: false
  55.             ,
  56.             bindAction: '#testListAction'
  57.             ,
  58.             choose: function (obj) {
  59.                 var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
  60.                 //读取本地文件
  61.                 obj.preview(function (index, file, result) {
  62.                     var tr = $(['<tr id="upload-' + index + '">'
  63.                         , '<td>' + file.name + '</td>'
  64.                         , '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
  65.                         , '<td>等待上传</td>'
  66.                         , '<td>'
  67.                         , '<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
  68.                         , '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
  69.                         , '</td>'
  70.                         , '</tr>'].join(''));
  71.                     //单个重传
  72.                     tr.find('.demo-reload').on('click', function () {
  73.                         obj.upload(index, file);
  74.                     });
  75.                     //删除
  76.                     tr.find('.demo-delete').on('click', function () {
  77.                         delete files[index];
  78.                         tr.remove();
  79.                         uploadListIns.config.elem.next()[0].value = '';
  80.                     });
  81.                     demoListView.append(tr);
  82.                 });
  83.             }
  84.             ,
  85.             done: function (res, index, upload) {
  86.                 if (res.code == 1) { //上传成功
  87.                     var tr = demoListView.find('tr#upload-' + index)
  88.                         , tds = tr.children();
  89.                     tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
  90.                     tds.eq(3).html('<button type="button" class="layui-btn layui-btn-sm copy" data-clipboard-text="' + res.url + '"><i class="layui-icon"></i></button><button class="layui-btn layui-btn-sm delfile" fileid="' + res.id + '"><i class="layui-icon"></i></button>');
  91.                     tr.find('.delfile').on('click', function () {
  92.                         $.post({
  93.                             url: "api.php",
  94.                             beforeSend: function () {
  95.                                 layer.load();
  96.                             },
  97.                             data: {id: $(this).attr('fileid'), type: "del_file"},
  98.                             success: function (data) {
  99.                                 if (data.code == 1) {
  100.                                     layer.msg("删除成功!");
  101.                                     tr.remove();
  102.                                 } else {
  103.                                     layer.msg("删除失败!");
  104.                                 }
  105.                                 layer.closeAll('loading');
  106.                             },
  107.                             error: function (data) {
  108.                                 layer.closeAll('loading');
  109.                                 layer.msg("删除失败!");
  110.                             }
  111.                         })
  112.                     });
  113.                     var clipboard = new ClipboardJS('.copy');
  114.                     clipboard.on('success', function (e) {
  115.                         layer.msg("复制成功!");
  116.                         e.clearSelection();
  117.                     });
  118.                     clipboard.on('error', function (e) {
  119.                         layer.msg("复制失败!");
  120.                     });
  121.                     return delete this.files[index];
  122.                 } else {
  123.                     layer.msg(res.msg);
  124.                 }
  125.                 this.error(index, upload);
  126.             }
  127.             ,
  128.             error: function (index, upload) {
  129.                 var tr = demoListView.find('tr#upload-' + index)
  130.                     , tds = tr.children();
  131.                 tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
  132.                 tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
  133.             }
  134.         });
  135.     }();
  136. </script>
  137. </body>
  138. </html>
复制代码
PS注意项目:
请在程序目录下新建文件夹(upload)用于临时存储文件

支持多文件上传

上传失败文件重新上传

直接复制链接

在线删除文件


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表