@ -1,21 +0,0 @@ |
|||||||
MIT License |
|
||||||
|
|
||||||
Copyright (c) 2017 J3n5en |
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|
||||||
of this software and associated documentation files (the "Software"), to deal |
|
||||||
in the Software without restriction, including without limitation the rights |
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
||||||
copies of the Software, and to permit persons to whom the Software is |
|
||||||
furnished to do so, subject to the following conditions: |
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all |
|
||||||
copies or substantial portions of the Software. |
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
||||||
SOFTWARE. |
|
@ -1,99 +0,0 @@ |
|||||||
# ImgURL |
|
||||||
ImgURL是一款简单、纯粹的图床程序,使用PHP + SQLite 3开发,不需要复杂的配置,开箱即用。 |
|
||||||
|
|
||||||
### 环境要求 |
|
||||||
* PHP >= 5.6 |
|
||||||
* 需要exif函数支持 |
|
||||||
* SQLite 3 |
|
||||||
|
|
||||||
### 安装 |
|
||||||
* 访问:<a href = "https://github.com/helloxz/imgurl/archive/master.zip" target = "_blank" rel = "nofollow">master.zip</a>下载最新版ImgURL程序,放到您的站点根目录并解压。 |
|
||||||
* 访问 `http(s)://domain.com/install.php` 根据提示完成安装。 |
|
||||||
* **更多设置请参考帮助文档:[https://doc.xiaoz.me/#/imgurl/](https://doc.xiaoz.me/#/imgurl/) (必看)** |
|
||||||
|
|
||||||
### 开发计划 |
|
||||||
- [x] 图片上传与预览 |
|
||||||
- [x] 一键生成链接 |
|
||||||
- [x] 浏览与删除图片 |
|
||||||
- [x] 限制访客上传数量 |
|
||||||
- [x] 图片压缩 |
|
||||||
- [x] 图片鉴黄 |
|
||||||
- [x] API上传 |
|
||||||
- [x] 油猴脚本上传 |
|
||||||
- [ ] 图片水印 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 更新日志 |
|
||||||
#### v1.4 - 2018.11.06 |
|
||||||
* 新增安装向导 |
|
||||||
* 修复一处上传BUG |
|
||||||
|
|
||||||
#### v1.3 - 2018.09.11 |
|
||||||
* 新增粘贴上传(Ctrl + V) |
|
||||||
* 期待已久的API上传 |
|
||||||
* 后台新增按时间筛选图片 |
|
||||||
* 优化“探索发现”,之前为随机显示12张,现在显示本月所有图片(流加载) |
|
||||||
* 优化后台“看图模式” |
|
||||||
* 修复一些BGU,优化CSS |
|
||||||
* 增加ImgURL脚本,可在任意网页上传图片,参考:[https://www.xiaoz.me/archives/11038](https://www.xiaoz.me/archives/11038) |
|
||||||
|
|
||||||
#### v1.2 - 2018.08.11 |
|
||||||
* 增加URL批量上传 |
|
||||||
* 去掉一些不必要的菜单 |
|
||||||
* 优化CSS样式 |
|
||||||
* 优化图片查看器 |
|
||||||
* 修复一些BUG |
|
||||||
|
|
||||||
|
|
||||||
#### v1.1 - 2018.05.04 |
|
||||||
* 可上传至SM.MS图床 |
|
||||||
* 优化IP获取,及其它细节优化 |
|
||||||
* 修复一些BUG |
|
||||||
|
|
||||||
|
|
||||||
### 安全设置 |
|
||||||
* 配置完毕后测试功能没问题,请删除根目录的`check.php` |
|
||||||
* Apache默认已经通过`.htaccess`文件来屏蔽数据库下载 |
|
||||||
* Nginx用户请在server段内添加如下配置,并重启Nginx |
|
||||||
```nginx |
|
||||||
location ~* \.(db3)$ { |
|
||||||
deny all; |
|
||||||
} |
|
||||||
location ~* ^/(temp|upload)/.*.(php|php5)$ { |
|
||||||
return 444; |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
### Demo |
|
||||||
* [http://test.imgurl.org/](http://test.imgurl.org/) ,账号:`xiaoz`,密码:`xiaoz.me` |
|
||||||
|
|
||||||
![](https://imgurl.org/upload/1804/3ccc55eeb47965c3.png) |
|
||||||
|
|
||||||
### 获取捐赠版 |
|
||||||
ImgURL普通版和捐赠版功能上没有任何区别,不过您可以请xiaoz喝一杯咖啡或吃一顿午餐即可获得捐赠版。描下方二维码获取,并在付款说明填写您的网址。 |
|
||||||
|
|
||||||
![](https://imgurl.org/upload/1712/cb349aa4a1b95997.png) |
|
||||||
|
|
||||||
#### 捐赠版说明 |
|
||||||
* 可提供首次安装及调试 |
|
||||||
* 可去除底部版权 |
|
||||||
|
|
||||||
#### 捐赠列表 |
|
||||||
* 2018-05-02 lackk.com 捐赠30元 |
|
||||||
* 2018-05-04 zip30.com 捐赠30元 |
|
||||||
* 2018-05-06 sopoy.com 捐赠30元 |
|
||||||
* 2018-05-06 tuchuang.app 捐赠60元 |
|
||||||
* 2018-05-15 coolsong.com 捐赠30元 |
|
||||||
|
|
||||||
### 鸣谢 |
|
||||||
ImgURL的诞生离不开以下开源项目。 |
|
||||||
|
|
||||||
* LayUI: [https://github.com/sentsin/layui](https://github.com/sentsin/layui) |
|
||||||
* class.upload.php: [https://github.com/verot/class.upload.php](https://github.com/verot/class.upload.php) |
|
||||||
* clipBoard.js: [https://github.com/baixuexiyang/clipBoard.js](https://github.com/baixuexiyang/clipBoard.js) |
|
||||||
|
|
||||||
### 联系我 |
|
||||||
* Blog:[https://www.xiaoz.me/](https://www.xiaoz.me/) |
|
||||||
* QQ:337003006 |
|
||||||
* 社区支持:[https://ttt.sh/](https://ttt.sh/category/6/) |
|
@ -1,38 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "ImgURL - 简单、纯粹的图床程序。"; |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg10 layui-col-md-offset1" id = "about"> |
|
||||||
<h1>ImgURL</h1> |
|
||||||
<p>ImgURL是一款简洁、纯粹的图床程序,使用PHP + Sqlite开发,开箱即用。</p> |
|
||||||
<h3>功能与特色</h3> |
|
||||||
<ul> |
|
||||||
<li>拽拖上传图片、实时预览</li> |
|
||||||
<li>一键生成链接,一键复制</li> |
|
||||||
<li>基本图片管理</li> |
|
||||||
<li>TinyPNG图片压缩</li> |
|
||||||
<li>图片智能鉴黄</li> |
|
||||||
</ul> |
|
||||||
<h3>使用说明</h3> |
|
||||||
<ul> |
|
||||||
<li>图片最大上传限制为2M</li> |
|
||||||
<li>游客每天限制上传5张图片</li> |
|
||||||
<li>图片定期清理,重要图片建议自行下载ImgURL部署</li> |
|
||||||
<li>勿上传暴力、色情、反动图片,否则后果自负</li> |
|
||||||
<li>如果您使用ImgURL代表同意以上协议</li> |
|
||||||
</ul> |
|
||||||
<h3>联系我</h3> |
|
||||||
<ul> |
|
||||||
<li>Blog:<a href = "https://www.xiaoz.me/" target = "_blank">https://www.xiaoz.me/</a></li> |
|
||||||
<li>QQ:337003006</li> |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<?php |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
?> |
|
@ -1,8 +0,0 @@ |
|||||||
<?php |
|
||||||
include_once("../config.php"); |
|
||||||
|
|
||||||
$year = date('Y',time()); |
|
||||||
|
|
||||||
$version = file_get_contents(APP."functions/version.txt"); |
|
||||||
echo "当前版本:".$version."<br />"; |
|
||||||
?> |
|
@ -1,27 +0,0 @@ |
|||||||
<?php |
|
||||||
error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED); |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
//获取图片ID |
|
||||||
$id = $_GET['id']; |
|
||||||
$id = (int) $id; |
|
||||||
//获取类型 |
|
||||||
$type = $_GET['type']; |
|
||||||
|
|
||||||
if((!isset($id) || ($id == ''))) { |
|
||||||
echo 'ID错误'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
// 判断类型 |
|
||||||
switch ($type) { |
|
||||||
case 'sm': |
|
||||||
$pic->deletesm($id); |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
//删除图片 |
|
||||||
$pic->delete($id); |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
?> |
|
@ -1,60 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "后台管理 - ImgURL"; |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/header.php"); |
|
||||||
//获取统计数据 |
|
||||||
$data = $pic->data(); |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container" style = "margin-top:2em;"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg3"> |
|
||||||
<!-- 载入左侧导航栏 --> |
|
||||||
<?php include_once("../tpl/admin/left.php"); ?> |
|
||||||
</div> |
|
||||||
<!-- 后台内容部分 --> |
|
||||||
<div class="layui-col-lg9"> |
|
||||||
<h1 style = "margin-bottom:0.8em;color:#515151">数据统计:</h1> |
|
||||||
<!-- 后台数据统计 --> |
|
||||||
<div id="tongji" class="layui-row layui-col-space18"> |
|
||||||
<div class="layui-col-lg4"> |
|
||||||
<div class="item"> |
|
||||||
<p></p><h2>累计上传</h2><p></p> |
|
||||||
<p><?php echo $data['all']; ?> 张</p> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="layui-col-lg4"> |
|
||||||
<div class="item"> |
|
||||||
<p></p><h2><i class="fa fa-street-view fa-fw"></i> 本月上传</h2><p></p> |
|
||||||
<p><?php echo $data['month']; ?> 张</p> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="layui-col-lg4"> |
|
||||||
<div class="item"> |
|
||||||
<p></p><h2><i class="fa fa-exclamation-triangle fa-fw"></i> 当日上传</h2><p></p> |
|
||||||
<p><?php echo $data['day']; ?> 张</p> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="layui-col-lg4"> |
|
||||||
<div class="item"> |
|
||||||
<a href="./senioradmin.php?type=dubious&page=1"> |
|
||||||
<p></p><h2><i class="fa fa-exclamation-triangle fa-fw"></i> 可疑图片</h2><p></p> |
|
||||||
<p><?php echo $data['level']; ?> 张</p> |
|
||||||
</a> |
|
||||||
|
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
<!-- 后台数据统计END --> |
|
||||||
</div> |
|
||||||
<!-- 后台内容部分END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<?php |
|
||||||
// 载入页脚 |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/footer.php"); |
|
||||||
?> |
|
@ -1,39 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "登录 - ImgURL"; |
|
||||||
// 简单的判断用户是否登录 |
|
||||||
if(isset($_COOKIE['user'])) { |
|
||||||
header('Location:index.php'); |
|
||||||
} |
|
||||||
?> |
|
||||||
<?php |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/header.php"); |
|
||||||
?> |
|
||||||
<!-- 内容部分 --> |
|
||||||
<div id="container"> |
|
||||||
<div class="layui-container"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg4 layui-col-md-offset4"> |
|
||||||
<!-- 登录表单 --> |
|
||||||
<div class="login"> |
|
||||||
<div class="layui-form-item"> |
|
||||||
<input id = "user" type="text" name="title" required lay-verify="required" placeholder="用户名" autocomplete="off" class="layui-input"> |
|
||||||
</div> |
|
||||||
<div class="layui-form-item"> |
|
||||||
<input id = "password" type="password" name="password" required lay-verify="required" placeholder="密码" autocomplete="off" class="layui-input"> |
|
||||||
</div> |
|
||||||
<div class="layui-form-item"> |
|
||||||
<button class="layui-btn" lay-submit lay-filter="formDemo" onclick = "login()">登录</button> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 登录表单END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 内容部分end --> |
|
||||||
<?php |
|
||||||
// 载入页脚 |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/footer.php"); |
|
||||||
?> |
|
@ -1,7 +0,0 @@ |
|||||||
<?php |
|
||||||
//清除COOKIE |
|
||||||
setcookie("user", '', time()-3600,"/"); |
|
||||||
setcookie("password", '', time()-3600,"/"); |
|
||||||
|
|
||||||
echo "<script>window.location.href = './login.php'</script>"; |
|
||||||
?> |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
//获取操作类型 |
|
||||||
$type = $_GET['type']; |
|
||||||
|
|
||||||
//获取图片ID |
|
||||||
$id = $_GET['id']; |
|
||||||
$id = (int) $id; |
|
||||||
|
|
||||||
if((!isset($id) || ($id == ''))) { |
|
||||||
echo 'ID错误'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//判断需要操作的类型 |
|
||||||
switch ($type) { |
|
||||||
case 'cdubious': |
|
||||||
//取消图片可疑状态 |
|
||||||
$pic->cdubious($id); |
|
||||||
break; |
|
||||||
|
|
||||||
default: |
|
||||||
# code... |
|
||||||
break; |
|
||||||
} |
|
||||||
?> |
|
@ -1,126 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "后台管理 - ImgURL"; |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/header.php"); |
|
||||||
|
|
||||||
// 获取类型 |
|
||||||
$type = $_GET['type']; |
|
||||||
//获取时间 |
|
||||||
@$date = $_GET['date']; |
|
||||||
//如果时间不为空 |
|
||||||
if($date != ''){ |
|
||||||
$thedate = explode("|",$date); |
|
||||||
$starttime = $thedate[0]; |
|
||||||
$endtime = $thedate[1]; |
|
||||||
//翻页选项 |
|
||||||
$thepage = '&date='.$date; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$starttime = ''; |
|
||||||
//获取当前日期 |
|
||||||
$endtime = date("Y-m-d",time()); |
|
||||||
//翻页选项 |
|
||||||
$thepage = ''; |
|
||||||
} |
|
||||||
//获取页数 |
|
||||||
$page = $_GET['page']; |
|
||||||
//查询图片 |
|
||||||
$imgs = $pic->newquery($type,$date); |
|
||||||
|
|
||||||
$up = (int)$page - 1; |
|
||||||
if($up <= 0){ |
|
||||||
$up = 1; |
|
||||||
} |
|
||||||
$down = (int)$page +1; |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container" style = "margin-top:2em;"> |
|
||||||
<div class="layui-row layui-col-space20"> |
|
||||||
<div class="layui-col-lg3"> |
|
||||||
<!-- 载入左侧导航栏 --> |
|
||||||
<?php include_once("../tpl/admin/left.php"); ?> |
|
||||||
</div> |
|
||||||
<!-- 后台内容部分 --> |
|
||||||
<div id = "adminpic"> |
|
||||||
<div class="layui-col-lg9 layui-col-space10" style="margin-bottom:6em;"> |
|
||||||
<!--时间筛选--> |
|
||||||
<div id="date"> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>按时间筛选:</td> |
|
||||||
<td><input type="text" class="layui-input" id="starttime" value = "<?php echo $starttime; ?>"></td> |
|
||||||
<td> - </td> |
|
||||||
<td><input type="text" class="layui-input" id="endtime" value = "<?php echo $endtime; ?>"></td> |
|
||||||
<td><button lay-submit class="layui-btn" onclick = "screen('picadmin.php')">筛选</button></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
<!--时间筛选END--> |
|
||||||
<?php foreach ($imgs as $img) { |
|
||||||
$imgurl = $config['domain'].$img['path']; |
|
||||||
$id = $img['id']; |
|
||||||
?> |
|
||||||
<div id = "imgid<?php echo $id; ?>" class="layui-col-lg4 picadmin" onmouseover = "show_imgcon(<?php echo $id; ?>)" onmouseout = "hide_imgcon(<?php echo $id; ?>)"> |
|
||||||
<!-- <a id = "imgid<?php echo $id; ?>" href="javascript:;" onclick = "adminshow('<?php echo $imgurl ?>',<?php echo $id; ?>)"></a> --> |
|
||||||
<img lay-src="<?php echo $imgurl; ?>" layer-src="<?php echo $imgurl; ?>" alt="图片ID: <?php echo $id; ?>" src = "../static/loading32.gif"> |
|
||||||
<!-- 删除按钮 --> |
|
||||||
<div class = "imgcon" id = "imgcon<?php echo $id; ?>"> |
|
||||||
<a href="javascript:;" title = "图片链接" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "adminshow('<?php echo $imgurl ?>',<?php echo $id; ?>)"><i class="layui-icon"></i></a> |
|
||||||
<a href="javascript:;" title = "删除这张图片" class="layui-btn layui-btn-xs layui-btn-danger" onclick="deleteimg(<?php echo $id; ?>)"><i class="layui-icon"></i></a> |
|
||||||
</div> |
|
||||||
<!-- 删除按钮END --> |
|
||||||
</div> |
|
||||||
<?php } ?> |
|
||||||
</div> |
|
||||||
<!-- 翻页按钮 --> |
|
||||||
|
|
||||||
<!-- 翻页按钮END --> |
|
||||||
<!-- 后台内容部分END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<div id="adminshow"> |
|
||||||
<div style = "margin-top:2em;"><center><img src="" alt=""></center></div> |
|
||||||
<div id = "copy"> |
|
||||||
<center> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="520"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id="url" data-cip-id="url"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id="html" data-cip-id="html"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id="markdown" data-cip-id="markdown"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id="bbcode" data-cip-id="bbcode"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</center> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<?php |
|
||||||
// 载入页脚 |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/footer.php"); |
|
||||||
?> |
|
@ -1,186 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "后台管理 - ImgURL"; |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/header.php"); |
|
||||||
|
|
||||||
// 获取类型 |
|
||||||
$type = $_GET['type']; |
|
||||||
//获取页数 |
|
||||||
$page = $_GET['page']; |
|
||||||
//获取时间 |
|
||||||
@$date = $_GET['date']; |
|
||||||
//如果时间不为空 |
|
||||||
if($date != ''){ |
|
||||||
$thedate = explode("|",$date); |
|
||||||
$starttime = $thedate[0]; |
|
||||||
$endtime = $thedate[1]; |
|
||||||
//翻页选项 |
|
||||||
$thepage = '&date='.$date; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$starttime = ''; |
|
||||||
//获取当前日期 |
|
||||||
$endtime = date("Y-m-d",time()); |
|
||||||
//翻页选项 |
|
||||||
$thepage = ''; |
|
||||||
} |
|
||||||
//查询图片 |
|
||||||
$imgs = $pic->querypic($type,$page,$date); |
|
||||||
|
|
||||||
$up = (int)$page - 1; |
|
||||||
if($up <= 0){ |
|
||||||
$up = 1; |
|
||||||
} |
|
||||||
$down = (int)$page +1; |
|
||||||
|
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container" style = "margin-top:2em;"> |
|
||||||
<div class="layui-row layui-col-space20"> |
|
||||||
<div class="layui-col-lg3"> |
|
||||||
<!-- 载入左侧导航栏 --> |
|
||||||
<?php include_once("../tpl/admin/left.php"); ?> |
|
||||||
</div> |
|
||||||
<!-- 后台内容部分 --> |
|
||||||
<div id = "adminpic"> |
|
||||||
<div class="layui-col-lg9"> |
|
||||||
<!--时间筛选--> |
|
||||||
<div id="date"> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>按时间筛选:</td> |
|
||||||
<td><input type="text" class="layui-input" id="starttime" value = "<?php echo $starttime; ?>"></td> |
|
||||||
<td> - </td> |
|
||||||
<td><input type="text" class="layui-input" id="endtime" value = "<?php echo $endtime; ?>"></td> |
|
||||||
<td><button lay-submit class="layui-btn" onclick = "screen('senioradmin.php')">筛选</button></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
<!--时间筛选END--> |
|
||||||
<!-- 表格 --> |
|
||||||
<table class="layui-table"> |
|
||||||
<colgroup> |
|
||||||
<col width="30"> |
|
||||||
<col width="280"> |
|
||||||
<col width="120"> |
|
||||||
<col width="120"> |
|
||||||
<col width="120"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th>ID</th> |
|
||||||
<th>图片路径(点击可查看)</th> |
|
||||||
<th>IP</th> |
|
||||||
<th>日期</th> |
|
||||||
<th>是否压缩</th> |
|
||||||
<th>操作</th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<?php foreach ($imgs as $img) { |
|
||||||
$imgurl = $config['domain'].$img['path']; |
|
||||||
$id = $img['id']; |
|
||||||
$size = filesize('../'.$img['path']); //文件大小计算 |
|
||||||
$size = round($size / 1024)."kb"; |
|
||||||
if($img['compress'] == 0) { |
|
||||||
$compress = array( |
|
||||||
"css" => "layui-btn layui-btn-xs layui-btn-danger", |
|
||||||
"content" => "否" |
|
||||||
); |
|
||||||
} |
|
||||||
else{ |
|
||||||
$compress = array( |
|
||||||
"css" => "layui-btn layui-btn-xs layui-btn-normal", |
|
||||||
"content" => "是" |
|
||||||
); |
|
||||||
} |
|
||||||
?> |
|
||||||
<tr id = "imgid<?php echo $id; ?>"> |
|
||||||
<td><a href="javascript:;" onclick = "copyurl('<?php echo $imgurl; ?>')"><?php echo $id; ?></a></td> |
|
||||||
<td> |
|
||||||
<a id = "imgid<?php echo $id; ?>" href="javascript:;" onclick = "adminshow('<?php echo $imgurl ?>',<?php echo $id; ?>)" onmouseover = "viewimg('<?php echo $id; ?>','<?php echo $imgurl; ?>')" onmouseout = "hideimg('<?php echo $id; ?>')"> |
|
||||||
<?php echo $img['path']; ?> |
|
||||||
</a> |
|
||||||
<div id="viewimg<?php echo $id; ?>" class = "viewimg"> |
|
||||||
<img src="" alt=""> |
|
||||||
</div> |
|
||||||
</td> |
|
||||||
<td><a href="javascript:;" onclick = "ipquery('<?php echo $img['ip']; ?>')"><?php echo $img['ip']; ?></a></td> |
|
||||||
<td><?php echo $img['date']; ?></td> |
|
||||||
<td> |
|
||||||
<a href="javascript::" class = "<?php echo $compress['css']; ?>"><?php echo $compress['content']; ?></a> |
|
||||||
<a href="javascript:;" class = "layui-btn layui-btn-xs layui-btn-disabled"><?php echo $size; ?></a> |
|
||||||
</td> |
|
||||||
<td> |
|
||||||
<?php if($type == 'dubious'){ ?> |
|
||||||
<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "cdubious(<?php echo $id; ?>)">非可疑</a> |
|
||||||
<?php }else{ ?> |
|
||||||
<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "compress(<?php echo $id; ?>)">压缩</a> |
|
||||||
<?php } ?> |
|
||||||
<!-- <a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "copyurl('<?php echo $imgurl; ?>')">复制</a> --> |
|
||||||
<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-danger" onclick = "deleteimg(<?php echo $id; ?>)">删除</a> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<?php } ?> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
<!-- 表格END --> |
|
||||||
</div> |
|
||||||
<!-- 翻页按钮 --> |
|
||||||
<div class="layui-col-lg9 layui-col-md-offset3"> |
|
||||||
<div class="page"> |
|
||||||
<a href="?type=<?php echo $type; ?>&page=<?php echo $up.$thepage; ?>" class="layui-btn">上一页</a> |
|
||||||
<a href="?type=<?php echo $type; ?>&page=<?php echo $down.$thepage; ?>" class="layui-btn">下一页</a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 翻页按钮END --> |
|
||||||
|
|
||||||
<!-- 后台内容部分END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<div id="adminshow"> |
|
||||||
<div style = "margin-top:2em;"><center><img src="" alt=""></center></div> |
|
||||||
<div id = "copy"> |
|
||||||
<center> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="520"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id="url" data-cip-id="url"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id="html" data-cip-id="html"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id="markdown" data-cip-id="markdown"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id="bbcode" data-cip-id="bbcode"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</center> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<?php |
|
||||||
// 载入页脚 |
|
||||||
include_once("../tpl/admin/footer.php"); |
|
||||||
?> |
|
@ -1,97 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "后台管理 - ImgURL"; |
|
||||||
include_once("../functions/class/class.admin.php"); |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/header.php"); |
|
||||||
|
|
||||||
// 获取类型 |
|
||||||
$type = $_GET['type']; |
|
||||||
//获取页数 |
|
||||||
$page = $_GET['page']; |
|
||||||
//查询sm.ms图片 |
|
||||||
$imgs = $pic->querysm($page); |
|
||||||
//var_dump($imgs); |
|
||||||
|
|
||||||
$up = (int)$page - 1; |
|
||||||
if($up <= 0){ |
|
||||||
$up = 1; |
|
||||||
} |
|
||||||
$down = (int)$page +1; |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container" style = "margin-top:2em;"> |
|
||||||
<div class="layui-row layui-col-space20"> |
|
||||||
<div class="layui-col-lg3"> |
|
||||||
<!-- 载入左侧导航栏 --> |
|
||||||
<?php include_once("../tpl/admin/left.php"); ?> |
|
||||||
</div> |
|
||||||
<!-- 后台内容部分 --> |
|
||||||
<div id = "adminpic"> |
|
||||||
<div class="layui-col-lg9"> |
|
||||||
<?php if($type == 'preview') { ?> |
|
||||||
<!-- 预览图片 --> |
|
||||||
<div class="layui-col-lg9 layui-col-space10"> |
|
||||||
<?php foreach ($imgs as $img) { |
|
||||||
?> |
|
||||||
<div class="layui-col-lg4 picadmin"> |
|
||||||
<img lay-src="<?php echo $img['url']; ?>" layer-src="<?php echo $img['url']; ?>" alt="ID: <?php echo $img['id']; ?>" src = "../static/loading32.gif" /> |
|
||||||
</div> |
|
||||||
<?php } ?> |
|
||||||
</div> |
|
||||||
<?php }else{ ?> |
|
||||||
<!-- 预览图片END --> |
|
||||||
<!-- 表格 --> |
|
||||||
<table class="layui-table"> |
|
||||||
<colgroup> |
|
||||||
<col width="60"> |
|
||||||
<col width="380"> |
|
||||||
<col width="150"> |
|
||||||
<col width="120"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th>ID</th> |
|
||||||
<th>图片路径(点击可查看)</th> |
|
||||||
<th>IP</th> |
|
||||||
<th>日期</th> |
|
||||||
<th>操作</th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<?php foreach ($imgs as $img) { |
|
||||||
|
|
||||||
?> |
|
||||||
<tr id = "imgid<?php echo $img['id']; ?>"> |
|
||||||
<td><?php echo $img['id']; ?></td> |
|
||||||
<td><a id = "imgid<?php echo $img['id']; ?>" href="javascript:;" onclick = "smshow('<?php echo $img['url'] ?>',<?php echo $img['id']; ?>)"><?php echo $img['url']; ?></a></td> |
|
||||||
<td><a href="javascript:;" onclick = "ipquery('<?php echo $img['ip']; ?>')"><?php echo $img['ip']; ?></a></td> |
|
||||||
<td><?php echo $img['date']; ?></td> |
|
||||||
<td> |
|
||||||
<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "copyurl('<?php echo $img['url']; ?>')">复制</a> |
|
||||||
<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-danger" onclick = "deletesm(<?php echo $img['id']; ?>)">删除</a> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
<?php } ?> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
<?php } ?> |
|
||||||
<!-- 表格END --> |
|
||||||
</div> |
|
||||||
<!-- 翻页按钮 --> |
|
||||||
<div class="layui-col-lg9 layui-col-md-offset3"> |
|
||||||
<div class="page"> |
|
||||||
<a href="?type=<?php echo $type; ?>&page=<?php echo $up; ?>" class="layui-btn">上一页</a> |
|
||||||
<a href="?type=<?php echo $type; ?>&page=<?php echo $down; ?>" class="layui-btn">下一页</a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 翻页按钮END --> |
|
||||||
|
|
||||||
<!-- 后台内容部分END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<?php |
|
||||||
// 载入页脚 |
|
||||||
// 载入头部 |
|
||||||
include_once("../tpl/admin/footer.php"); |
|
||||||
?> |
|
@ -1,34 +0,0 @@ |
|||||||
<?php |
|
||||||
echo "<h1>请将以下信息填写到配置文件config.php</h1>"; |
|
||||||
//获取当前端口 |
|
||||||
$port = $_SERVER["SERVER_PORT"]; |
|
||||||
//对端口进行判断 |
|
||||||
switch ( $port ) |
|
||||||
{ |
|
||||||
case 80: |
|
||||||
$protocol = "http://"; |
|
||||||
$port = ''; |
|
||||||
break; |
|
||||||
case 443: |
|
||||||
$protocol = "https://"; |
|
||||||
$port = ''; |
|
||||||
break; |
|
||||||
default: |
|
||||||
$protocol = "http://"; |
|
||||||
$port = ":".$port; |
|
||||||
break; |
|
||||||
} |
|
||||||
//获取项目绝对路径 |
|
||||||
$thedir = __DIR__; |
|
||||||
$thedir = str_replace("\\","/",$thedir).'/'; |
|
||||||
echo "项目绝对路径:".$thedir."<br />"; |
|
||||||
|
|
||||||
//或如URI |
|
||||||
$uri = $_SERVER["REQUEST_URI"]; |
|
||||||
$uri = str_replace("check.php","",$uri); |
|
||||||
//组合为完整的URL |
|
||||||
$domain = $protocol.$_SERVER['SERVER_NAME'].$port.$uri; |
|
||||||
echo "当前域名为:".$domain; |
|
||||||
|
|
||||||
echo "<h1>配置完成后测试网站功能正常,请删除此文件。</h1>"; |
|
||||||
?> |
|
@ -1,38 +0,0 @@ |
|||||||
<?php |
|
||||||
//项目绝对路径 |
|
||||||
define("APP","homedir"); |
|
||||||
|
|
||||||
//载入数据库类 |
|
||||||
include_once(APP."functions/class/Medoo.php"); |
|
||||||
|
|
||||||
$config = array( |
|
||||||
"domain" => "https://imgurl.org/", //站点地址 |
|
||||||
"user" => "imguser", //管理员账号 |
|
||||||
"password" => "imgpass", //管理员密码 |
|
||||||
"limit" => 5, //游客上传数量限制 |
|
||||||
"watermark" => "imgurl.org", //图片文字水印 |
|
||||||
"userdir" => "temp", //游客上传目录,一般不用做修改 |
|
||||||
"admindir" => "upload", //管理员上传目录,一般不用做修改 |
|
||||||
"datadir" => APP."db/imgurl.db3" //数据库路径,一般不用做修改 |
|
||||||
); |
|
||||||
// TinyPNG压缩图片 |
|
||||||
$tinypng = array( |
|
||||||
"option" => false, |
|
||||||
"key" => array( |
|
||||||
"xxx", //TinyPNG API KEY,支持填写多行key |
|
||||||
"xxx" //如果只有一个key,请删除此行 |
|
||||||
) |
|
||||||
); |
|
||||||
//ModerateContent 图片鉴黄,请参考帮助文档:https://doc.xiaoz.me/docs/imgurl/imgurl-jh |
|
||||||
$ModerateContent = array( |
|
||||||
"option" => false, |
|
||||||
"key" => "xxx" |
|
||||||
); |
|
||||||
|
|
||||||
//初始化Medoo |
|
||||||
use Medoo\Medoo; |
|
||||||
$database = new medoo([ |
|
||||||
'database_type' => 'sqlite', |
|
||||||
'database_file' => $config['datadir'] |
|
||||||
]); |
|
||||||
?> |
|
@ -1,96 +0,0 @@ |
|||||||
<?php |
|
||||||
error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED); |
|
||||||
//载入配置文件 |
|
||||||
include_once("./config.php"); |
|
||||||
//载入TinyPNG |
|
||||||
require_once("functions/tinypng/Tinify/Exception.php"); |
|
||||||
require_once("functions/tinypng/Tinify/ResultMeta.php"); |
|
||||||
require_once("functions/tinypng/Tinify/Result.php"); |
|
||||||
require_once("functions/tinypng/Tinify/Source.php"); |
|
||||||
require_once("functions/tinypng/Tinify/Client.php"); |
|
||||||
require_once("functions/tinypng/Tinify.php"); |
|
||||||
|
|
||||||
//初始化值 |
|
||||||
$dispose['compress'] = 0; |
|
||||||
$dispose['level'] = 0; |
|
||||||
|
|
||||||
//获取ID |
|
||||||
$id = $_GET['id']; |
|
||||||
$id = (int)$id; |
|
||||||
//获取tinypng key |
|
||||||
$tinykey = array_rand($tinypng['key']); //取出数组键值 |
|
||||||
$tinykey = $tinypng['key'][$tinykey]; |
|
||||||
//获取ModerateContent key |
|
||||||
$mckey = $ModerateContent['key']; |
|
||||||
|
|
||||||
//如果ID不存在或为空 |
|
||||||
if((!isset($id)) || ($id == '')) { |
|
||||||
echo 'ID错误!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//查询对应信息 |
|
||||||
$info = $database->get("imginfo",[ |
|
||||||
"id", |
|
||||||
"path", |
|
||||||
"compress", |
|
||||||
"level" |
|
||||||
],[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
|
|
||||||
//组合为完整的URL地址 |
|
||||||
$imgurl = $config['domain'].$info['path']; |
|
||||||
//获取压缩状态 |
|
||||||
$compress = $info['compress']; |
|
||||||
//获取图片等级 |
|
||||||
$level = $info['level']; |
|
||||||
//获取文件后缀名 |
|
||||||
$suffix = substr(strrchr($info['path'], '.'), 1); |
|
||||||
//后缀变为小写 |
|
||||||
$suffix = strtolower($suffix); |
|
||||||
if(($suffix == 'png') || ($suffix == 'jpg') || ($suffix == 'jpeg')) { |
|
||||||
$iscompress = 1; |
|
||||||
} |
|
||||||
|
|
||||||
//对图片进行压缩 |
|
||||||
if(($tinypng['option'] == true) && ($iscompress == 1) && ($compress == 0)) { |
|
||||||
//初始化 |
|
||||||
\Tinify\setKey($tinykey); |
|
||||||
$source = \Tinify\fromUrl($imgurl); |
|
||||||
//覆盖原有图片 |
|
||||||
$source->toFile($info['path']); |
|
||||||
//更新数据库 |
|
||||||
$database->update("imginfo",[ |
|
||||||
"compress" => 1 |
|
||||||
],[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
$dispose['compress'] = 1; |
|
||||||
} |
|
||||||
//对图片进行鉴黄 |
|
||||||
if(($ModerateContent['option'] == true) && (($level == 0) || ($level == null))) { |
|
||||||
$apiurl = "https://www.moderatecontent.com/api/v2?key=".$mckey."&url=".$imgurl; |
|
||||||
$curl = curl_init($apiurl); |
|
||||||
|
|
||||||
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36"); |
|
||||||
curl_setopt($curl, CURLOPT_FAILONERROR, true); |
|
||||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
||||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
|
|
||||||
$html = curl_exec($curl); |
|
||||||
curl_close($curl); |
|
||||||
|
|
||||||
//更新数据库 |
|
||||||
$html = json_decode($html); |
|
||||||
$level = $html->rating_index; |
|
||||||
$database->update("imginfo",["level" => $level],["id" => $id]); |
|
||||||
$dispose['level'] = $level; |
|
||||||
} |
|
||||||
//返回json数据 |
|
||||||
$dispose['code'] = 1; |
|
||||||
$dispose = json_encode($dispose); |
|
||||||
echo $dispose; |
|
||||||
?> |
|
Before Width: | Height: | Size: 4.2 KiB |
@ -1,81 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "探索发现 - ImgURL"; |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
// 载入类 |
|
||||||
include_once("config.php"); |
|
||||||
|
|
||||||
//获取当前时间 |
|
||||||
$thetime = date('Y-m',time()); |
|
||||||
|
|
||||||
//初始化 |
|
||||||
$domain = $config['domain']; |
|
||||||
$userdir = $config['userdir']; |
|
||||||
//$sql = "SELECT `id`,`path` FROM `imginfo` WHERE (`dir` = '$userdir' AND `level` < 3 AND `date` LIKE '$thetime%') ORDER BY random() LIMIT 12"; |
|
||||||
$sql = "SELECT `id`,`path` FROM `imginfo` WHERE (`dir` = '$userdir' AND `level` < 3 AND `date` LIKE '$thetime%') ORDER BY `id` DESC"; |
|
||||||
$datas = $database->query($sql)->fetchAll(); |
|
||||||
|
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container" style = "margin-bottom:6em;"> |
|
||||||
<div class="layui-row" > |
|
||||||
<div class="msg"><i class="layui-icon"></i> 此页面显示本月上传图片,如果不显示说明本月暂未上传图片。</div> |
|
||||||
<div id = "found-img" class = "layui-col-space20"> |
|
||||||
<?php foreach ($datas as $img) { |
|
||||||
$imgurl = $domain.$img['path']; |
|
||||||
$imgid = $img['id']; |
|
||||||
?> |
|
||||||
<div id = "imgid<?php echo $imgid; ?>" class="layui-col-lg4" style = "height:220px;border:1px solid #ECECEC;margin-top:1em;" onmouseover = "show_imgcon(<?php echo $imgid; ?>)" onmouseout = "hide_imgcon(<?php echo $imgid; ?>)"> |
|
||||||
<!-- <a href="javascript:;" onclick = "userpreview('<?php echo $imgurl ?>',<?php echo $imgid; ?>)"></a> --> |
|
||||||
<img lay-src="<?php echo $imgurl ?>" layer-src="<?php echo $imgurl ?>" src = "./static/loading32.gif"> |
|
||||||
<!-- 图片按钮 --> |
|
||||||
<div class = "imgcon" id = "imgcon<?php echo $imgid; ?>"> |
|
||||||
<a href="javascript:;" title = "图片链接" class="layui-btn layui-btn-xs layui-btn-normal" onclick = "adminshow('<?php echo $imgurl ?>',<?php echo $imgid; ?>)"><i class="layui-icon"></i></a> |
|
||||||
</div> |
|
||||||
<!-- 图片按钮END --> |
|
||||||
</div> |
|
||||||
<?php } ?> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<div id="adminshow"> |
|
||||||
<div style = "margin-top:2em;"><center><img src="" alt=""></center></div> |
|
||||||
<div id = "copy"> |
|
||||||
<center> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="520"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id="url" data-cip-id="url"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id="html" data-cip-id="html"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id="markdown" data-cip-id="markdown"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id="bbcode" data-cip-id="bbcode"></td> |
|
||||||
<td><a href="javascript:;" class="layui-btn layui-btn-sm" onclick="newcopy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</center> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--图片查看--> |
|
||||||
<?php |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
?> |
|
@ -1,27 +0,0 @@ |
|||||||
<?php |
|
||||||
// 控制器 |
|
||||||
// 载入类 |
|
||||||
include_once("class/class.user.php"); |
|
||||||
$type = $_GET['type']; |
|
||||||
switch ($type) { |
|
||||||
case 'login': |
|
||||||
// 用户登录时输入的信息 |
|
||||||
$user = array( |
|
||||||
"user" => $_POST['user'], |
|
||||||
"password" => $_POST['password'] |
|
||||||
); |
|
||||||
// 配置文件里面的用户信息 |
|
||||||
$admin = array( |
|
||||||
"user" => $config['user'], |
|
||||||
"password" => $config['password'] |
|
||||||
); |
|
||||||
$basis->login($user,$admin); |
|
||||||
break; |
|
||||||
case 'check': |
|
||||||
$basis->check($config); |
|
||||||
break; |
|
||||||
default: |
|
||||||
# code... |
|
||||||
break; |
|
||||||
} |
|
||||||
?> |
|
@ -1,120 +0,0 @@ |
|||||||
<?php |
|
||||||
/* |
|
||||||
name:ImgURL上传API |
|
||||||
version:v1.0 |
|
||||||
author:xiaoz.me |
|
||||||
update:2018-09-11 |
|
||||||
*/ |
|
||||||
header('Access-Control-Allow-Origin:*'); |
|
||||||
//载入配置文件 |
|
||||||
include_once("./class/class.user.php"); |
|
||||||
|
|
||||||
@$type = $_GET['type']; |
|
||||||
$type = strip_tags($type); |
|
||||||
//如果没有post文件 |
|
||||||
if(!$_FILES['file']){ |
|
||||||
$basis->re_error('未选择文件!'); |
|
||||||
} |
|
||||||
//检查用户是否登录 |
|
||||||
$status = $basis->check($config); |
|
||||||
|
|
||||||
//检查用户是否登陆来判断上传目录 |
|
||||||
if($status == 'islogin') { |
|
||||||
//设置上传路径 |
|
||||||
$updir = $config['admindir']; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$updir = $config['userdir']; |
|
||||||
//限制用户上传数量 |
|
||||||
$basis->limitnum(); |
|
||||||
} |
|
||||||
|
|
||||||
//获取上传者信息 |
|
||||||
$ip = $basis->getip(); |
|
||||||
$ua = $_SERVER['HTTP_USER_AGENT']; |
|
||||||
$date = date('Y-m-d',time()); |
|
||||||
//载入上传类 |
|
||||||
include('./class/class.upload.php'); |
|
||||||
|
|
||||||
//上传方法 |
|
||||||
$handle = new upload($_FILES['file']); |
|
||||||
if ($handle->uploaded) { |
|
||||||
$handle->file_new_name_body = 'image_resized'; |
|
||||||
//允许上传大小2m |
|
||||||
$handle->file_max_size = '2097152'; |
|
||||||
//允许的MIME类型,仅运行上传图片 |
|
||||||
$handle->allowed = array('image/*'); |
|
||||||
|
|
||||||
// 当前月份 |
|
||||||
$current_time = date('ym',time()); |
|
||||||
//上传路径:目录 + 时间 |
|
||||||
$handle->process('../'.$updir.'/'.$current_time."/"); |
|
||||||
if ($handle->processed) { |
|
||||||
//获取站点域名 |
|
||||||
$domain = $config['domain']; |
|
||||||
//生成文件hash |
|
||||||
$fhash = hash_file("md5",$handle->file_dst_pathname,FALSE); |
|
||||||
$fhash = substr($fhash,8,16); |
|
||||||
//新的文件名(../temp/1804/\d64c8036c0605175.jpg) |
|
||||||
$new_img = $handle->file_dst_path.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
//图片URL地址 |
|
||||||
$imgurl = $domain.$updir.'/'.$current_time.'/'.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
//图片路径(temp/1804/d64c8036c0605175.jpg) |
|
||||||
$imgdir = $updir.'/'.$current_time.'/'.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
|
|
||||||
//判断文件是否已经存在 |
|
||||||
if(!is_file($new_img)) { |
|
||||||
//对文件更名 |
|
||||||
rename($handle->file_dst_pathname,$new_img); |
|
||||||
} |
|
||||||
else{ |
|
||||||
//删除原始文件 |
|
||||||
unlink($handle->file_dst_pathname); |
|
||||||
} |
|
||||||
|
|
||||||
//检查某张图片是否已经上传过,如果已经上传了,直接返回数据并终止操作 |
|
||||||
$basis->isupload($imgdir); |
|
||||||
|
|
||||||
//没有上传过的图片,继续写入数据库 |
|
||||||
$last_user_id = $database->insert("imginfo", [ |
|
||||||
"path" => $imgdir, |
|
||||||
"ip" => $ip, |
|
||||||
"ua" => $ua, |
|
||||||
"date" => $date, |
|
||||||
"dir" => $updir, |
|
||||||
"compress" => 0, |
|
||||||
"level" => 0 |
|
||||||
]); |
|
||||||
//返回最后的ID |
|
||||||
$account_id = $database->id(); |
|
||||||
//上传成功,返回json数据 |
|
||||||
$redata = array( |
|
||||||
"code" => 1, |
|
||||||
"id" => $account_id, |
|
||||||
"url" => $imgurl, |
|
||||||
"width" => $handle->image_dst_x, |
|
||||||
"height" => $handle->image_dst_y |
|
||||||
); |
|
||||||
|
|
||||||
//直接返回图片URL |
|
||||||
if($type == 'url'){ |
|
||||||
echo $imgurl; |
|
||||||
} |
|
||||||
else{ |
|
||||||
//返回json |
|
||||||
echo $redata = json_encode($redata); |
|
||||||
} |
|
||||||
|
|
||||||
$handle->clean(); |
|
||||||
//继续请求鉴黄接口 |
|
||||||
$basis->curlZip($account_id,$config['domain']); |
|
||||||
} else { |
|
||||||
//上传出现错误,返回报错信息 |
|
||||||
$redata = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => $handle->error |
|
||||||
); |
|
||||||
echo json_encode($redata); |
|
||||||
} |
|
||||||
} |
|
||||||
?> |
|
@ -1,387 +0,0 @@ |
|||||||
<?php |
|
||||||
error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED); |
|
||||||
// 载入配置文件 |
|
||||||
include_once("../config.php"); |
|
||||||
|
|
||||||
class Admin{ |
|
||||||
var $config; |
|
||||||
var $database; |
|
||||||
function __construct($config,$database) { |
|
||||||
$this->config = $config; |
|
||||||
$this->database = $database; |
|
||||||
$user1 = $config['user'].md5("imgurl".$config['password']); |
|
||||||
// echo $user1; |
|
||||||
//COOKIES里面的信息 |
|
||||||
$user2 = $_COOKIE['user'].$_COOKIE['password']; |
|
||||||
|
|
||||||
//如果两者信息相符,说明已登录 |
|
||||||
if($user1 != $user2) { |
|
||||||
echo '权限不足,请先登录!'; |
|
||||||
//清理cookie |
|
||||||
setcookie("user", '', time()-3600,"/"); |
|
||||||
setcookie("password", '', time()-3600,"/"); |
|
||||||
header('Location:login.php'); |
|
||||||
exit; |
|
||||||
} |
|
||||||
} |
|
||||||
//查询图片 |
|
||||||
function querypic($type,$page,$date = null){ |
|
||||||
//对时间进行拆分 |
|
||||||
if($date != null){ |
|
||||||
$date = explode("|",$date); |
|
||||||
|
|
||||||
$starttime = $date[0]; |
|
||||||
$endttime = $date[1]; |
|
||||||
} |
|
||||||
|
|
||||||
$config = $this->config; |
|
||||||
$database = $this->database; |
|
||||||
|
|
||||||
//分页计算 |
|
||||||
$start = ($page - 1) * 12; |
|
||||||
//$end = $page * 12; |
|
||||||
|
|
||||||
if(($page == '') || (!isset($page))) { |
|
||||||
$page = 1; |
|
||||||
} |
|
||||||
|
|
||||||
//要查询的条数 |
|
||||||
$num = 12; |
|
||||||
|
|
||||||
//判断类型 |
|
||||||
switch ($type) { |
|
||||||
case 'user': |
|
||||||
// echo 'dsd'; |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"dir" => $config['userdir'], |
|
||||||
"ORDER" => ["id" => "DESC"], |
|
||||||
"LIMIT" => [$start,$num] |
|
||||||
]); |
|
||||||
// var_dump( $database->log() ); |
|
||||||
// exit; |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
case 'admin': |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"dir" => $config['admindir'], |
|
||||||
"ORDER" => ["id" => "DESC"], |
|
||||||
"LIMIT" => [$start,$num] |
|
||||||
]); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
case 'dubious': |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"level" => 3, |
|
||||||
"ORDER" => ["id" => "DESC"], |
|
||||||
"LIMIT" => [$start,$num] |
|
||||||
]); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
case 'unidentification': |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"level" => null, |
|
||||||
"ORDER" => ["id" => "DESC"], |
|
||||||
"LIMIT" => [$start,$num] |
|
||||||
]); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
default: |
|
||||||
$sql = "SELECT * FROM imginfo WHERE date(date) BETWEEN '$starttime' AND '$endttime' ORDER BY `id` DESC LIMIT $num OFFSET $start"; |
|
||||||
|
|
||||||
$datas = $database->query($sql); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
//新版查询图片 |
|
||||||
function newquery($type,$date = null){ |
|
||||||
//echo $type; |
|
||||||
//exit; |
|
||||||
//获取当前时间 |
|
||||||
$thetime = date('Y-m',time()); |
|
||||||
//对时间进行拆分 |
|
||||||
if($date != null){ |
|
||||||
$date = explode("|",$date); |
|
||||||
|
|
||||||
$starttime = $date[0]; |
|
||||||
$endttime = $date[1]; |
|
||||||
} |
|
||||||
|
|
||||||
$config = $this->config; |
|
||||||
$database = $this->database; |
|
||||||
|
|
||||||
//判断类型 |
|
||||||
switch ($type) { |
|
||||||
case 'user': |
|
||||||
// echo 'dsd'; |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"dir" => $config['userdir'], |
|
||||||
"date[~]" => $thetime, |
|
||||||
"ORDER" => ["id" => "DESC"] |
|
||||||
]); |
|
||||||
// var_dump( $database->log() ); |
|
||||||
// exit; |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
case 'admin': |
|
||||||
$datas = $database->select("imginfo", "*", [ |
|
||||||
"dir" => $config['admindir'], |
|
||||||
"date[~]" => $thetime, |
|
||||||
"ORDER" => ["id" => "DESC"] |
|
||||||
]); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
default: |
|
||||||
$sql = "SELECT * FROM imginfo WHERE date(date) BETWEEN '$starttime' AND '$endttime' ORDER BY `id` DESC"; |
|
||||||
|
|
||||||
$datas = $database->query($sql); |
|
||||||
//var_dump($database->log()); |
|
||||||
return $datas; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
//删除一张图片 |
|
||||||
function delete($id){ |
|
||||||
$config = $this->config; |
|
||||||
$database = $this->database; |
|
||||||
//先查询数据库获取图片路径 |
|
||||||
$path = $database->get("imginfo","path",[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
|
|
||||||
|
|
||||||
//完整的图片路径 |
|
||||||
$imgpath = APP.$path; |
|
||||||
//如果图片删除成功,将再次删除数据库 |
|
||||||
//删除图片 |
|
||||||
unlink($imgpath); |
|
||||||
//删除数据库 |
|
||||||
$del = $database->delete("imginfo", [ |
|
||||||
"AND" => [ |
|
||||||
"id" => $id |
|
||||||
] |
|
||||||
]); |
|
||||||
echo 'ok'; |
|
||||||
} |
|
||||||
//统计数据 |
|
||||||
function data() { |
|
||||||
//获取当前月份 |
|
||||||
$themonth = date('Y-m',time()); |
|
||||||
//获取当天时间 |
|
||||||
$theday = date('Y-m-d',time()); |
|
||||||
|
|
||||||
//统计本月上传图片数量 |
|
||||||
$month = $this->database->count("imginfo",[ |
|
||||||
"date[~]" => $themonth |
|
||||||
]); |
|
||||||
|
|
||||||
$day = $this->database->count("imginfo",[ |
|
||||||
"date" => $theday |
|
||||||
]); |
|
||||||
|
|
||||||
//统计可疑图片 |
|
||||||
$level = $this->database->count("imginfo",[ |
|
||||||
"level" => 3 |
|
||||||
]); |
|
||||||
//统计全部图片 |
|
||||||
$all = $this->database->count("imginfo"); |
|
||||||
|
|
||||||
//返回数据 |
|
||||||
$redata = array( |
|
||||||
"month" => $month, |
|
||||||
"day" => $day, |
|
||||||
"level" => $level, |
|
||||||
"all" => $all |
|
||||||
); |
|
||||||
return $redata; |
|
||||||
} |
|
||||||
//取消图片可疑状态 |
|
||||||
function cdubious($id){ |
|
||||||
$database = $this->database; |
|
||||||
$database->update("imginfo",[ |
|
||||||
"level" => 1 |
|
||||||
],[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
echo 'ok'; |
|
||||||
} |
|
||||||
//对某张图片进行压缩,未开发完成 |
|
||||||
function compress($id,$tinypng){ |
|
||||||
$database = $this->database; |
|
||||||
$config = $this->config; |
|
||||||
if($tinypng['option'] != true){ |
|
||||||
$compress['code'] = 0; |
|
||||||
$compress['msg'] = "未开启图片压缩功能!"; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$getdata = $database->get("imginfo","*",[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
//查询SM.MS图片 |
|
||||||
//查询图片 |
|
||||||
function querysm($page){ |
|
||||||
$config = $this->config; |
|
||||||
$database = $this->database; |
|
||||||
|
|
||||||
//分页计算 |
|
||||||
$start = ($page - 1) * 12; |
|
||||||
//$end = $page * 12; |
|
||||||
|
|
||||||
if(($page == '') || (!isset($page))) { |
|
||||||
$page = 1; |
|
||||||
} |
|
||||||
|
|
||||||
//要查询的条数 |
|
||||||
$num = 12; |
|
||||||
|
|
||||||
//判断类型 |
|
||||||
$datas = $database->select("sm", "*", [ |
|
||||||
"ORDER" => ["id" => "DESC"], |
|
||||||
"LIMIT" => [$start,$num] |
|
||||||
]); |
|
||||||
return $datas; |
|
||||||
} |
|
||||||
//删除SM.MS图片 |
|
||||||
function deletesm($id){ |
|
||||||
$config = $this->config; |
|
||||||
$database = $this->database; |
|
||||||
//先查询数据库 |
|
||||||
$query = $database->get("sm","*",[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
$delete = $database->delete("sm", [ |
|
||||||
"AND" => [ |
|
||||||
"id" => $id |
|
||||||
] |
|
||||||
]); |
|
||||||
//请求接口删除图片 |
|
||||||
$curl = curl_init($query['delete']); |
|
||||||
|
|
||||||
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"); |
|
||||||
curl_setopt($curl, CURLOPT_FAILONERROR, true); |
|
||||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
||||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
#设置超时时间,最小为1s(可选) |
|
||||||
curl_setopt($curl , CURLOPT_TIMEOUT, 2); |
|
||||||
|
|
||||||
$html = curl_exec($curl); |
|
||||||
curl_close($curl); |
|
||||||
echo 'ok'; |
|
||||||
} |
|
||||||
//通过URL批量上传图片 |
|
||||||
function urlup($arr){ |
|
||||||
$config = $this->config; |
|
||||||
//$arr参数为一个数组 |
|
||||||
$arr = explode("\n",$arr); |
|
||||||
//计算URL个数 |
|
||||||
$urlnum = count($arr); |
|
||||||
//不能超过10个 |
|
||||||
if($urlnum > 10){ |
|
||||||
$rejson = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => "URL链接不能超过10个!" |
|
||||||
); |
|
||||||
echo json_encode($rejson); |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//遍历URL并下载图片 |
|
||||||
foreach( $arr as $url ) |
|
||||||
{ |
|
||||||
//去掉空格 |
|
||||||
$url = trim($url); |
|
||||||
//判断是否是URL |
|
||||||
if(!filter_var($url, FILTER_VALIDATE_URL)){ |
|
||||||
$rejson = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => $url."不是有效的地址,程序终止!" |
|
||||||
); |
|
||||||
echo json_encode($rejson); |
|
||||||
exit; |
|
||||||
} |
|
||||||
//获取图片后缀 |
|
||||||
$suffix = explode(".",$url); |
|
||||||
$suffix = end($suffix); |
|
||||||
$suffix = strtolower($suffix); |
|
||||||
|
|
||||||
//如果是图片后缀,使用curl进行抓取 |
|
||||||
if(($suffix == 'jpg') || ($suffix == 'jpeg') || ($suffix == 'png') || ($suffix == 'bmp') || ($suffix == 'gif')) { |
|
||||||
|
|
||||||
$curl = curl_init($url); |
|
||||||
|
|
||||||
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"); |
|
||||||
curl_setopt($curl, CURLOPT_FAILONERROR, true); |
|
||||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
||||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
#设置超时时间,最小为1s(可选) |
|
||||||
curl_setopt($curl , CURLOPT_TIMEOUT, 10); |
|
||||||
|
|
||||||
$html = curl_exec($curl); |
|
||||||
curl_close($curl); |
|
||||||
|
|
||||||
//判断目录是否存在 |
|
||||||
$dir = APP.$config['admindir'].'/'.date('ym',time()); |
|
||||||
if(!is_dir($dir)){ |
|
||||||
mkdir($dir); |
|
||||||
} |
|
||||||
//生成文件名 |
|
||||||
$filenme = $dir.date('Y-m-d H:i:s',time()).$suffix; |
|
||||||
$filenme = substr(md5($url.$filenme), 8, 16).'.'.$suffix; |
|
||||||
|
|
||||||
$full = $dir.'/'.$filenme; |
|
||||||
//写入文件 |
|
||||||
$myfile = fopen($full, "w") or die("Unable to open file!"); |
|
||||||
fwrite($myfile, $html); |
|
||||||
fclose($myfile); |
|
||||||
$datas = array( |
|
||||||
"path" => $config['admindir'].'/'.date('ym',time()).'/'.$filenme, |
|
||||||
"dir" => $config['admindir'] |
|
||||||
); |
|
||||||
//写入数据库 |
|
||||||
$insert = $this->indb($datas); |
|
||||||
|
|
||||||
} |
|
||||||
else{ |
|
||||||
$rejson = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => "包含无效的图片地址,程序终止!" |
|
||||||
); |
|
||||||
echo json_encode($rejson); |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
$rejson = array( |
|
||||||
"code" => 1, |
|
||||||
"msg" => "成功上传".$urlnum."张图片!" |
|
||||||
); |
|
||||||
echo json_encode($rejson); |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//图片写入数据库 |
|
||||||
function indb($datas){ |
|
||||||
$database = $this->database; |
|
||||||
$date = date('Y-m-d',time()); |
|
||||||
$insert = $database->insert("imginfo",[ |
|
||||||
"path" => $datas['path'], |
|
||||||
"ip" => "127.0.0.1", |
|
||||||
"ua" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", |
|
||||||
"date" => $date, |
|
||||||
"dir" => $datas['dir'], |
|
||||||
"compress" => 0, |
|
||||||
"level" => 0 |
|
||||||
]); |
|
||||||
return $insert; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$pic = new Admin($config,$database); |
|
||||||
?> |
|
@ -1,173 +0,0 @@ |
|||||||
<?php |
|
||||||
class Install{ |
|
||||||
public $homedir; |
|
||||||
public $domain; |
|
||||||
//构造函数 |
|
||||||
public function __construct(){ |
|
||||||
//获取项目绝对路径 |
|
||||||
$thedir = __DIR__; |
|
||||||
$homedir = str_replace("\\","/",$thedir); |
|
||||||
$homedir = str_replace("functions/class","",$homedir); |
|
||||||
$this->homedir = $homedir; |
|
||||||
|
|
||||||
//获取当前域名 |
|
||||||
//获取当前端口 |
|
||||||
$port = $_SERVER["SERVER_PORT"]; |
|
||||||
//对端口进行判断 |
|
||||||
switch ( $port ) |
|
||||||
{ |
|
||||||
case 80: |
|
||||||
$protocol = "http://"; |
|
||||||
$port = ''; |
|
||||||
break; |
|
||||||
case 443: |
|
||||||
$protocol = "https://"; |
|
||||||
$port = ''; |
|
||||||
break; |
|
||||||
default: |
|
||||||
$protocol = "http://"; |
|
||||||
$port = ":".$port; |
|
||||||
break; |
|
||||||
} |
|
||||||
$uri = $_SERVER["REQUEST_URI"]; |
|
||||||
$uri = str_replace("check.php","",$uri); |
|
||||||
//组合为完整的URL |
|
||||||
$domain = $protocol.$_SERVER['SERVER_NAME'].$port.$uri; |
|
||||||
$domain = str_replace("install.php?setup=2","",$domain); |
|
||||||
$this->domain = $domain; |
|
||||||
} |
|
||||||
//检查环境是否符合条件 |
|
||||||
public function check(){ |
|
||||||
$homedir = $this->homedir; |
|
||||||
|
|
||||||
//echo $homedir.'db'; |
|
||||||
//检查根目录是否可写,结果写入到一个数组 |
|
||||||
//echo $thedir; |
|
||||||
$checkarr['home'] = is_writable($homedir); |
|
||||||
if($checkarr['home']){ |
|
||||||
$statusarr['home'] = '通过'; |
|
||||||
|
|
||||||
} |
|
||||||
else{ |
|
||||||
$statusarr['home'] = '<span style = "color:red;">目录不可写!</span>'; |
|
||||||
|
|
||||||
} |
|
||||||
$checkarr['db'] = is_writable($homedir.'db'); |
|
||||||
if($checkarr['db']){ |
|
||||||
$statusarr['db'] = '通过'; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$statusarr['db'] = '<span style = "color:red;">目录不可写!</span>'; |
|
||||||
|
|
||||||
} |
|
||||||
//检测组建是否支持 |
|
||||||
$ext = get_loaded_extensions(); |
|
||||||
if(array_search('pdo_sqlite',$ext)){ |
|
||||||
$statusarr['pdo'] = '支持'; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$statusarr['pdo'] = '<span style = "color:red;">不支持!</span>'; |
|
||||||
} |
|
||||||
//return $checkarr; |
|
||||||
return $statusarr; |
|
||||||
} |
|
||||||
//获取站点信息 |
|
||||||
public function info(){ |
|
||||||
$homedir = $this->homedir; |
|
||||||
|
|
||||||
$info = array( |
|
||||||
"homedir" => $this->homedir, |
|
||||||
"domain" => $this->domain |
|
||||||
); |
|
||||||
|
|
||||||
return $info; |
|
||||||
} |
|
||||||
//验证函数 |
|
||||||
protected function verify($data,$type){ |
|
||||||
switch ($type) { |
|
||||||
//检查用户名 |
|
||||||
case 'user': |
|
||||||
$pattern = '/^[a-zA-Z0-9]+$/'; |
|
||||||
if($data == ''){ |
|
||||||
echo '请填写用户名!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
if(!preg_match($pattern,$data)){ |
|
||||||
echo '用户名格式有误!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
break; |
|
||||||
case 'pass': |
|
||||||
$pattern = '/^[a-zA-Z0-9!@#$%^&*.]+$/'; |
|
||||||
if(!preg_match($pattern,$data)){ |
|
||||||
echo '密码格式有误!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
break; |
|
||||||
case 'pass2': |
|
||||||
$pass1 = $data['pass1']; |
|
||||||
$pass2 = $data['pass2']; |
|
||||||
|
|
||||||
if($pass1 != $pass2){ |
|
||||||
echo '两次密码不一致!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
break; |
|
||||||
case 'domain': |
|
||||||
$domain = $data['domain']; |
|
||||||
if(!filter_var($domain, FILTER_VALIDATE_URL)){ |
|
||||||
echo '域名格式有误!(需要包含https://)'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
break; |
|
||||||
default: |
|
||||||
# code... |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
//安装 |
|
||||||
public function setup($data){ |
|
||||||
$homedir = $this->homedir; |
|
||||||
$dbpath = $this->homedir.'db/'; |
|
||||||
$user = $data['user']; |
|
||||||
$pass1 = $data['pass1']; |
|
||||||
$pass2 = $data['pass2']; |
|
||||||
|
|
||||||
|
|
||||||
$this->verify($user,'user'); |
|
||||||
$this->verify($pass1,'pass'); |
|
||||||
$this->verify($data,'pass2'); |
|
||||||
$this->verify($data,'domain'); |
|
||||||
|
|
||||||
//复制一份数据库 |
|
||||||
copy($dbpath."imgurl-simple.db3",$dbpath."imgurl.db3"); |
|
||||||
//复制一份配置文件 |
|
||||||
if(copy($homedir."config-simple.php",$homedir."config.php")){ |
|
||||||
$configdir = $homedir."config.php"; |
|
||||||
|
|
||||||
$myfile = fopen($homedir."config.php", "r") or die("Unable to open file!"); |
|
||||||
|
|
||||||
|
|
||||||
$content = fread($myfile,filesize($configdir)); |
|
||||||
//执行替换 |
|
||||||
$content = str_replace("imguser",$user,$content); |
|
||||||
$content = str_replace("imgpass",$pass2,$content); |
|
||||||
$content = str_replace("homedir",$data['homedir'],$content); |
|
||||||
$content = str_replace("https://imgurl.org/",$data['domain'],$content); |
|
||||||
|
|
||||||
//var_dump($content); |
|
||||||
|
|
||||||
//写入文件 |
|
||||||
$myfile = fopen($homedir."config.php", "w+") or die("Unable to open file!"); |
|
||||||
|
|
||||||
|
|
||||||
fwrite($myfile, $content); |
|
||||||
//关闭 |
|
||||||
fclose($myfile); |
|
||||||
//更名安装文件 |
|
||||||
rename($homedir."install.php",$homedir."install.php.bak"); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
?> |
|
@ -1,90 +0,0 @@ |
|||||||
<?php |
|
||||||
error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED); |
|
||||||
/* |
|
||||||
图像处理类 |
|
||||||
*/ |
|
||||||
include_once("../../config.php"); |
|
||||||
//载入TinyPNG |
|
||||||
require_once(APP."functions/tinypng/Tinify/Exception.php"); |
|
||||||
require_once(APP."functions/tinypng/Tinify/ResultMeta.php"); |
|
||||||
require_once(APP."functions/tinypng/Tinify/Result.php"); |
|
||||||
require_once(APP."functions/tinypng/Tinify/Source.php"); |
|
||||||
require_once(APP."functions/tinypng/Tinify/Client.php"); |
|
||||||
require_once(APP."functions/tinypng/Tinify.php"); |
|
||||||
|
|
||||||
//初始化值 |
|
||||||
$dispose['compress'] = 0; |
|
||||||
$dispose['level'] = 0; |
|
||||||
|
|
||||||
//获取ID |
|
||||||
$id = $_GET['id']; |
|
||||||
$id = (int)$id; |
|
||||||
//获取tinypng key |
|
||||||
$tinykey = array_rand($tinypng['key']); //取出数组键值 |
|
||||||
$tinykey = $tinypng['key'][$tinykey]; |
|
||||||
$iscompress = 0; |
|
||||||
|
|
||||||
//如果ID不存在或为空 |
|
||||||
if((!isset($id)) || ($id == '')) { |
|
||||||
echo 'ID错误!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//如果没有启用压缩 |
|
||||||
if($tinypng['option'] != true){ |
|
||||||
echo '未启用压缩功能!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//查询对应信息 |
|
||||||
$info = $database->get("imginfo",[ |
|
||||||
"id", |
|
||||||
"path", |
|
||||||
"compress", |
|
||||||
"level" |
|
||||||
],[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//组合为完整的URL地址 |
|
||||||
$imgurl = $config['domain'].$info['path']; |
|
||||||
//获取压缩状态 |
|
||||||
$compress = $info['compress']; |
|
||||||
//获取图片等级 |
|
||||||
$level = $info['level']; |
|
||||||
//获取文件后缀名 |
|
||||||
$suffix = substr(strrchr($info['path'], '.'), 1); |
|
||||||
//后缀改为小写 |
|
||||||
$suffix = strtolower($suffix); |
|
||||||
if(($suffix == 'png') || ($suffix == 'jpg') || ($suffix == 'jpeg')) { |
|
||||||
$iscompress = 1; |
|
||||||
} |
|
||||||
if($iscompress == 0){ |
|
||||||
echo '该后缀不支持压缩!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
if($compress == 1){ |
|
||||||
echo '该图片已经压缩!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
//对图片进行压缩 |
|
||||||
if(($tinypng['option'] == true) && ($iscompress == 1) && ($compress == 0)) { |
|
||||||
//初始化 |
|
||||||
\Tinify\setKey($tinykey); |
|
||||||
$source = \Tinify\fromUrl($imgurl); |
|
||||||
//覆盖原有图片 |
|
||||||
$source->toFile(APP.$info['path']); |
|
||||||
//更新数据库 |
|
||||||
$database->update("imginfo",[ |
|
||||||
"compress" => 1 |
|
||||||
],[ |
|
||||||
"id" => $id |
|
||||||
]); |
|
||||||
$dispose['compress'] = 1; |
|
||||||
echo '压缩成功!'; |
|
||||||
} |
|
||||||
?> |
|
@ -1,189 +0,0 @@ |
|||||||
<?php |
|
||||||
error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED); |
|
||||||
// 载入配置文件 |
|
||||||
include_once("../config.php"); |
|
||||||
|
|
||||||
class User{ |
|
||||||
var $config; |
|
||||||
var $database; |
|
||||||
|
|
||||||
//构造函数 |
|
||||||
public function __construct($config,$database){ |
|
||||||
$this->config = $config; |
|
||||||
$this->database = $database; |
|
||||||
} |
|
||||||
|
|
||||||
// 用户登录,两个参数,一个是用户输入,一个是配置文件里面的用户信息 |
|
||||||
function login($user,$admin){ |
|
||||||
|
|
||||||
// 用户输入的信息进行md5加密和对比 |
|
||||||
$pw1 = md5($user['user'].$user['password']); |
|
||||||
$pw2 = md5($admin['user'].$admin['password']); |
|
||||||
|
|
||||||
|
|
||||||
// 判断用户名密码是否正确 |
|
||||||
if($pw1 != $pw2){ |
|
||||||
echo '用户名或密码不正确!'; |
|
||||||
setcookie("user", '', time()-3600,"/"); |
|
||||||
setcookie("password", '', time()-3600,"/"); |
|
||||||
exit; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$password = md5("imgurl".$admin['password']); |
|
||||||
//生成cookie |
|
||||||
setcookie("user", $user['user'], time()+3600 * 24 * 30,"/"); |
|
||||||
setcookie("password", $password, time()+3600 * 24 * 30,"/"); |
|
||||||
echo "<script>window.location.href = './index.php'</script>"; |
|
||||||
exit; |
|
||||||
} |
|
||||||
} |
|
||||||
//判断用户状态 |
|
||||||
function check($userinfo){ |
|
||||||
//配置文件里面的用户信息 |
|
||||||
$user1 = $userinfo['user'].md5("imgurl".$userinfo['password']); |
|
||||||
// echo $user1; |
|
||||||
//COOKIES里面的信息 |
|
||||||
$user2 = $_COOKIE['user'].$_COOKIE['password']; |
|
||||||
|
|
||||||
//如果两者信息相符,说明已登录 |
|
||||||
if($user1 == $user2) { |
|
||||||
return'islogin'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
else{ |
|
||||||
return 'nologin'; |
|
||||||
setcookie("user", '', time()-3600,"/"); |
|
||||||
setcookie("password", '', time()-3600,"/"); |
|
||||||
exit; |
|
||||||
} |
|
||||||
} |
|
||||||
//检查某张图片是否已经上传 |
|
||||||
function isupload($path){ |
|
||||||
$num = $this->database->count("imginfo",["path" => $path]); |
|
||||||
|
|
||||||
//如果图片已经上传过,直接返回图片信息 |
|
||||||
if($num >=1) { |
|
||||||
$info = $this->database->get("imginfo","*",["path" => $path]); |
|
||||||
$imgurl = $this->config['domain'].$path; |
|
||||||
//返回json数据 |
|
||||||
$redata = array( |
|
||||||
"code" => 1, |
|
||||||
"id" => $info['id'], |
|
||||||
"url" => $imgurl, |
|
||||||
"width" => 0, |
|
||||||
"height" => 0 |
|
||||||
); |
|
||||||
echo $redata = json_encode($redata); |
|
||||||
exit; |
|
||||||
} |
|
||||||
} |
|
||||||
//限制访客上传数量 |
|
||||||
function limitnum(){ |
|
||||||
//获取访客IP |
|
||||||
$ip = $_SERVER['REMOTE_ADDR']; |
|
||||||
//获取当前时间 |
|
||||||
$date = date('Y-m-d',time()); |
|
||||||
//获取配置文件限额 |
|
||||||
$limit = $this->config['limit']; |
|
||||||
//获取用户上传目录 |
|
||||||
$dir = $this->config['userdir']; |
|
||||||
//查询数据库统计数量 |
|
||||||
$database = $this->database; |
|
||||||
$num = $database->count("imginfo",[ |
|
||||||
"date" => $date, |
|
||||||
"ip" => $ip, |
|
||||||
"dir" => $dir |
|
||||||
]); |
|
||||||
|
|
||||||
if($num >= $limit) { |
|
||||||
$redata = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => "上传达到限制!" |
|
||||||
); |
|
||||||
echo $redata = json_encode($redata); |
|
||||||
exit; |
|
||||||
} |
|
||||||
} |
|
||||||
//获取访客真实IP |
|
||||||
function getip(){ |
|
||||||
if (getenv('HTTP_CLIENT_IP')) { |
|
||||||
$ip = getenv('HTTP_CLIENT_IP'); |
|
||||||
} |
|
||||||
elseif (getenv('HTTP_X_FORWARDED_FOR')) { |
|
||||||
$ip = getenv('HTTP_X_FORWARDED_FOR'); |
|
||||||
} |
|
||||||
elseif (getenv('HTTP_X_FORWARDED')) { |
|
||||||
$ip = getenv('HTTP_X_FORWARDED'); |
|
||||||
} |
|
||||||
elseif (getenv('HTTP_FORWARDED_FOR')) { |
|
||||||
$ip = getenv('HTTP_FORWARDED_FOR'); |
|
||||||
|
|
||||||
} |
|
||||||
elseif (getenv('HTTP_FORWARDED')) { |
|
||||||
$ip = getenv('HTTP_FORWARDED'); |
|
||||||
} |
|
||||||
else { |
|
||||||
$ip = $_SERVER['REMOTE_ADDR']; |
|
||||||
} |
|
||||||
return $ip; |
|
||||||
} |
|
||||||
//判断文件MIME类型 |
|
||||||
function mime($path){ |
|
||||||
$mime = mime_content_type($path); |
|
||||||
switch ( $mime ) |
|
||||||
{ |
|
||||||
case 'image/gif': |
|
||||||
case 'image/png': |
|
||||||
case 'image/jpeg': |
|
||||||
case 'image/bmp': |
|
||||||
return true; |
|
||||||
break; |
|
||||||
default: |
|
||||||
return false; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
//返回错误json |
|
||||||
function re_error($msg){ |
|
||||||
$arr = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => $msg |
|
||||||
); |
|
||||||
$rejson = json_encode($arr); |
|
||||||
echo $rejson; |
|
||||||
exit; |
|
||||||
} |
|
||||||
//请求tipng和鉴黄接口 |
|
||||||
function curlZip($id,$domain){ |
|
||||||
//组合为完整的接口 |
|
||||||
$apiurl = $domain.'dispose.php?id='.$id; |
|
||||||
//请求接口 |
|
||||||
$curl = curl_init($apiurl); |
|
||||||
|
|
||||||
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"); |
|
||||||
curl_setopt($curl, CURLOPT_FAILONERROR, true); |
|
||||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
||||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
#设置超时时间,最小为1s(可选) |
|
||||||
curl_setopt($curl , CURLOPT_TIMEOUT, 2); |
|
||||||
|
|
||||||
@curl_exec($curl); |
|
||||||
curl_close($curl); |
|
||||||
//var_dump($html); |
|
||||||
} |
|
||||||
//查询未识别图片 |
|
||||||
function unknown(){ |
|
||||||
$thedate = date('Y-m-d',time()); |
|
||||||
$sql = "SELECT * FROM `imginfo` WHERE (level IS NULL OR level = 0) AND date = '$thedate'"; |
|
||||||
$database = $this->database; |
|
||||||
//$datas = $database->select("imginfo","*"); |
|
||||||
$datas = $database->query($sql)->fetchAll(); |
|
||||||
return $datas; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
//自动初始化完成一些基础操作 |
|
||||||
$basis = new User($config,$database); |
|
||||||
?> |
|
@ -1,85 +0,0 @@ |
|||||||
<?php |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | class.upload.zh_CN.php | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | Copyright (c) caoshiwei 2008. All rights reserved. | |
|
||||||
// | Version 0.25 | |
|
||||||
// | Last modified 09/29/2008 | |
|
||||||
// | Email caoshiwei@gmail.com | |
|
||||||
// | Web http://www.hfut.edu.cn | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | This program is free software; you can redistribute it and/or modify | |
|
||||||
// | it under the terms of the GNU General Public License version 2 as | |
|
||||||
// | published by the Free Software Foundation. | |
|
||||||
// | | |
|
||||||
// | This program is distributed in the hope that it will be useful, | |
|
||||||
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|
||||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
|
||||||
// | GNU General Public License for more details. | |
|
||||||
// | | |
|
||||||
// | You should have received a copy of the GNU General Public License | |
|
||||||
// | along with this program; if not, write to the | |
|
||||||
// | Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |
|
||||||
// | Boston, MA 02111-1307 USA | |
|
||||||
// | | |
|
||||||
// | Please give credit on sites that use class.upload and submit changes | |
|
||||||
// | of the script so other people can use them as well. | |
|
||||||
// | This script is free to use, don't abuse. | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
|
|
||||||
/** |
|
||||||
* Class upload Chinese translation |
|
||||||
* |
|
||||||
* @version 0.25 |
|
||||||
* @author Shiwei Cao (caoshiwei@gmail.com) |
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License |
|
||||||
* @copyright Shiwei Cao |
|
||||||
* @package cmf |
|
||||||
* @subpackage external |
|
||||||
*/ |
|
||||||
|
|
||||||
$translation = array(); |
|
||||||
$translation['file_error'] = '文件错误,请重试。'; |
|
||||||
$translation['local_file_missing'] = '本地文件不存在。'; |
|
||||||
$translation['local_file_not_readable'] = '本地文件不可读。'; |
|
||||||
$translation['uploaded_too_big_ini'] = '文件上件出错 (上传的文件大小超过了php.ini中upload_max_filesize设置的大小)。'; |
|
||||||
$translation['uploaded_too_big_html'] = '文件上件出错 (上传的文件大小超过了HTML 表单设置的大小)。'; |
|
||||||
$translation['uploaded_partial'] = '文件上件出错 (上传的文件部分丢失)。'; |
|
||||||
$translation['uploaded_missing'] = '文件上件出错 (上传文件丢失)。'; |
|
||||||
$translation['uploaded_unknown'] = '文件上件出错 (未知错误).'; |
|
||||||
$translation['try_again'] = '文件上件出错。 请重试。'; |
|
||||||
$translation['file_too_big'] = '文件太大。'; |
|
||||||
$translation['no_mime'] = '未知文件类型。'; |
|
||||||
$translation['incorrect_file'] = '不正确的文件格式。'; |
|
||||||
$translation['image_too_wide'] = '图片宽度太大。'; |
|
||||||
$translation['image_too_narrow'] = '图片宽度太小。'; |
|
||||||
$translation['image_too_high'] = '图片高度太大。'; |
|
||||||
$translation['image_too_short'] = '图片高度太小。'; |
|
||||||
$translation['ratio_too_high'] = '图片宽/高比率太高(图片宽度太大)。'; |
|
||||||
$translation['ratio_too_low'] = '图片宽/高比率太低(图片高度太大).'; |
|
||||||
$translation['too_many_pixels'] = '图片位数太高。'; |
|
||||||
$translation['not_enough_pixels'] = '图片位数不够'; |
|
||||||
$translation['file_not_uploaded'] = '文件未上传,不能进行处理。'; |
|
||||||
$translation['already_exists'] = '%s 已经存在,请更换文件名。'; |
|
||||||
$translation['temp_file_missing'] = '处理的(临时)源文件不正确,不能进行处理。'; |
|
||||||
$translation['source_missing'] = '已上传的文件丢失,不能进行处理。'; |
|
||||||
$translation['destination_dir'] = '目标文件目录不能被创建,不能进行处理。'; |
|
||||||
$translation['destination_dir_missing'] = '目标文件目录不存在,不能进行处理。'; |
|
||||||
$translation['destination_path_not_dir'] = '目录路径不是一个有效的目录,不能进行处理。'; |
|
||||||
$translation['destination_dir_write'] = '不能让目标文件目录设置为可写的,不能进行处理。'; |
|
||||||
$translation['destination_path_write'] = '目录路径是不可以写的,不能进行处理。'; |
|
||||||
$translation['temp_file'] = '不能创建临时文件,不能进行处理。'; |
|
||||||
$translation['source_not_readable'] = '源文件不可以读,不能进行处理。'; |
|
||||||
$translation['no_create_support'] = '%s 不支持创建'; |
|
||||||
$translation['create_error'] = '从源文件创建 %s 图片过程中出错。'; |
|
||||||
$translation['source_invalid'] = '无法读取原始图片,确认是不是正确的图片文件?'; |
|
||||||
$translation['gd_missing'] = 'GD 好像不可以使用。'; |
|
||||||
$translation['watermark_no_create_support'] = '%s 创建不支持, 不能读取水印文件。'; |
|
||||||
$translation['watermark_create_error'] = '%s 不支持读, 不能创建水印。'; |
|
||||||
$translation['watermark_invalid'] = '未知文件格式, 无法读取水印文件。'; |
|
||||||
$translation['file_create'] = '%s 不支持创建。'; |
|
||||||
$translation['no_conversion_type'] = '未定义转换类型'; |
|
||||||
$translation['copy_failed'] = '在服务器上复制文件时出错。 copy() 操作失败.'; |
|
||||||
$translation['reading_failed'] = '读取过程中出错。'; |
|
||||||
|
|
||||||
?> |
|
@ -1,87 +0,0 @@ |
|||||||
<?php |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | class.upload.zh_TW.php | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | Copyright (c) Yang Chih-Wen 2009. All rights reserved. | |
|
||||||
// | Version 0.28 | |
|
||||||
// | Last modified 15/08/2009 | |
|
||||||
// | Email chihwen.yang@gmail.com | |
|
||||||
// | Web http://www.doubleservice.com/ | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
// | This program is free software; you can redistribute it and/or modify | |
|
||||||
// | it under the terms of the GNU General Public License version 2 as | |
|
||||||
// | published by the Free Software Foundation. | |
|
||||||
// | | |
|
||||||
// | This program is distributed in the hope that it will be useful, | |
|
||||||
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|
||||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
|
||||||
// | GNU General Public License for more details. | |
|
||||||
// | | |
|
||||||
// | You should have received a copy of the GNU General Public License | |
|
||||||
// | along with this program; if not, write to the | |
|
||||||
// | Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |
|
||||||
// | Boston, MA 02111-1307 USA | |
|
||||||
// | | |
|
||||||
// | Please give credit on sites that use class.upload and submit changes | |
|
||||||
// | of the script so other people can use them as well. | |
|
||||||
// | This script is free to use, don't abuse. | |
|
||||||
// +------------------------------------------------------------------------+ |
|
||||||
|
|
||||||
/** |
|
||||||
* Class upload Traditional Chinese translation |
|
||||||
* |
|
||||||
* @version 0.28 |
|
||||||
* @author Yang Chih-Wen (chihwen.yang@gmail.com) |
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License |
|
||||||
* @copyright Yang Chih-Wen |
|
||||||
* @package cmf |
|
||||||
* @subpackage external |
|
||||||
*/ |
|
||||||
|
|
||||||
$translation = array(); |
|
||||||
$translation['file_error'] = '檔案錯誤,請重試。'; |
|
||||||
$translation['local_file_missing'] = '本地端的檔案不存在。'; |
|
||||||
$translation['local_file_not_readable'] = '本地端的檔案不可讀取。'; |
|
||||||
$translation['uploaded_too_big_ini'] = '檔案上傳出錯 (上傳的檔案超過了 php.ini 中 upload_max_filesize 指定的大小)。'; |
|
||||||
$translation['uploaded_too_big_html'] = '檔案上傳出錯 (上傳的檔案超過了 HTML 表單中 MAX_FILE_SIZE 指定的大小)。'; |
|
||||||
$translation['uploaded_partial'] = '檔案上傳出錯 (只有部份的檔案被上傳)。'; |
|
||||||
$translation['uploaded_missing'] = '檔案上傳出錯 (沒有檔案被上傳)。'; |
|
||||||
$translation['uploaded_no_tmp_dir'] = '檔案上傳出錯 (找不到暫存目錄)。'; |
|
||||||
$translation['uploaded_cant_write'] = '檔案上傳出錯 (檔案寫入失敗)。'; |
|
||||||
$translation['uploaded_err_extension'] = '檔案上傳出錯 (檔案上傳被 extension 中斷)。'; |
|
||||||
$translation['uploaded_unknown'] = '檔案上傳出錯 (未知的錯誤)。'; |
|
||||||
$translation['try_again'] = '檔案上傳出錯,請重試。'; |
|
||||||
$translation['file_too_big'] = '檔案太大了。'; |
|
||||||
$translation['no_mime'] = '未知的 MIME Type 檔案類型。'; |
|
||||||
$translation['incorrect_file'] = '不正確的 MIME Type 檔案類型。'; |
|
||||||
$translation['image_too_wide'] = '圖片寬度太大。'; |
|
||||||
$translation['image_too_narrow'] = '圖片寬度太小。'; |
|
||||||
$translation['image_too_high'] = '圖片高度太大。'; |
|
||||||
$translation['image_too_short'] = '圖片高度太小。'; |
|
||||||
$translation['ratio_too_high'] = '圖片寬高比率太大 (圖片寬度太大)。'; |
|
||||||
$translation['ratio_too_low'] = '圖片寬高比率太小 (圖片高度太大)。'; |
|
||||||
$translation['too_many_pixels'] = '圖片像素太多。'; |
|
||||||
$translation['not_enough_pixels'] = '圖片像素太少。'; |
|
||||||
$translation['file_not_uploaded'] = '檔案未上傳,無法繼續進行處理。'; |
|
||||||
$translation['already_exists'] = '%s 已經存在,請更改檔名。'; |
|
||||||
$translation['temp_file_missing'] = '暫存的原始檔案不正確,無法繼續進行處理。'; |
|
||||||
$translation['source_missing'] = '已上傳的原始檔案不正確,無法繼續進行處理。'; |
|
||||||
$translation['destination_dir'] = '無法創建目標目錄,無法繼續進行處理。'; |
|
||||||
$translation['destination_dir_missing'] = '目標目錄不存在,無法繼續進行處理。'; |
|
||||||
$translation['destination_path_not_dir'] = '目標路徑不是一個有效的目錄,無法繼續進行處理。'; |
|
||||||
$translation['destination_dir_write'] = '目標目錄不能設定為可寫入,無法繼續進行處理。'; |
|
||||||
$translation['destination_path_write'] = '目錄路徑不可寫入,無法繼續進行處理。'; |
|
||||||
$translation['temp_file'] = '不能創建暫存檔案,無法繼續進行處理。'; |
|
||||||
$translation['source_not_readable'] = '原始檔案不可讀取,無法繼續進行處理。'; |
|
||||||
$translation['no_create_support'] = '不支援 %s 創建功能。'; |
|
||||||
$translation['create_error'] = '從原始檔案創建 %s 圖片過程中出錯。'; |
|
||||||
$translation['source_invalid'] = '無法讀取原始圖片,請確認是否為正確的圖片檔?'; |
|
||||||
$translation['gd_missing'] = '無法使用 GD 函式庫。'; |
|
||||||
$translation['watermark_no_create_support'] = '不支援 %s 創建功能,無法讀取浮水印。'; |
|
||||||
$translation['watermark_create_error'] = '不支援 %s 讀取功能,無法創建浮水印。'; |
|
||||||
$translation['watermark_invalid'] = '未知的圖片格式,無法讀取浮水印。'; |
|
||||||
$translation['file_create'] = '不支援 %s 創建功能。'; |
|
||||||
$translation['no_conversion_type'] = '未定義的轉換類型。'; |
|
||||||
$translation['copy_failed'] = '在伺服端複製檔案時出錯,copy() 操作失敗。'; |
|
||||||
$translation['reading_failed'] = '讀檔過程中出錯。'; |
|
||||||
?> |
|
@ -1,98 +0,0 @@ |
|||||||
<?php |
|
||||||
//载入配置文件 |
|
||||||
include_once("./class/class.user.php"); |
|
||||||
//检查用户是否登录 |
|
||||||
$status = $basis->check($config); |
|
||||||
|
|
||||||
//检查用户是否登陆来判断上传目录 |
|
||||||
if($status == 'islogin') { |
|
||||||
//设置上传路径 |
|
||||||
$updir = $config['admindir']; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$updir = $config['userdir']; |
|
||||||
//限制用户上传数量 |
|
||||||
$basis->limitnum(); |
|
||||||
} |
|
||||||
|
|
||||||
//获取上传者信息 |
|
||||||
$ip = $basis->getip(); |
|
||||||
$ua = $_SERVER['HTTP_USER_AGENT']; |
|
||||||
$date = date('Y-m-d',time()); |
|
||||||
|
|
||||||
//根据IP、ua、时间生成一个唯一的md5值 |
|
||||||
$picname = md5($ip.$ua.date('Y-m-d H:i:s',time())); |
|
||||||
//截取16个字符 |
|
||||||
$picname = substr($picname,8,16).'.png'; |
|
||||||
//本月图片路径 |
|
||||||
$monthdir = APP.$updir.'/'.date('ym',time()); |
|
||||||
|
|
||||||
$onepath = $updir.'/'.date('ym',time()).'/'.$picname; |
|
||||||
//路径不存在,则创建路径 |
|
||||||
if(!file_exists($monthdir)){ |
|
||||||
mkdir($monthdir,0777); |
|
||||||
} |
|
||||||
//图片完整存储路径 |
|
||||||
$picpath = APP.$onepath; |
|
||||||
|
|
||||||
//echo $picpath; |
|
||||||
//替换一下,以免windows出现问题 |
|
||||||
$picpath = str_replace("\\","/",$picpath); |
|
||||||
|
|
||||||
//echo $picpath; |
|
||||||
|
|
||||||
//接接收ase64图片 |
|
||||||
$picfile = $_POST['content']; |
|
||||||
$picfile = base64_decode($picfile); |
|
||||||
//echo $picfile; |
|
||||||
//存储图片 |
|
||||||
file_put_contents($picpath, $picfile); |
|
||||||
|
|
||||||
//获取文件mime类型 |
|
||||||
//如果不是图片文件,终止执行 |
|
||||||
if(!$basis->mime($picpath)){ |
|
||||||
unlink($picpath); |
|
||||||
$arr = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => '不允许的文件类型' |
|
||||||
); |
|
||||||
$json = json_encode($arr); |
|
||||||
echo $json; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
//继续执行并写入数据库 |
|
||||||
$last_user_id = $database->insert("imginfo", [ |
|
||||||
"path" => $onepath, |
|
||||||
"ip" => $ip, |
|
||||||
"ua" => $ua, |
|
||||||
"date" => $date, |
|
||||||
"dir" => $updir, |
|
||||||
"compress" => 0, |
|
||||||
"level" => 0 |
|
||||||
]); |
|
||||||
//var_dump($database->log()); |
|
||||||
//返回最后的ID |
|
||||||
$account_id = $database->id(); |
|
||||||
//写入数据库成功,返回json数据 |
|
||||||
if($last_user_id){ |
|
||||||
$url = $config['domain'].$onepath; |
|
||||||
rejson(1,$url,$account_id); |
|
||||||
} |
|
||||||
//echo $picpath; |
|
||||||
//var_dump($picfile); |
|
||||||
|
|
||||||
?> |
|
||||||
<?php |
|
||||||
//返回json数据 |
|
||||||
function rejson($code,$url,$id = 0){ |
|
||||||
$arr = array( |
|
||||||
"code" => $code, |
|
||||||
"url" => $url, |
|
||||||
"id" => $id |
|
||||||
); |
|
||||||
$json = json_encode($arr); |
|
||||||
echo $json; |
|
||||||
} |
|
||||||
?> |
|
@ -1,59 +0,0 @@ |
|||||||
<?php |
|
||||||
//载入类 |
|
||||||
include_once("./class/class.user.php"); |
|
||||||
//获取sm.ms API返回数据 |
|
||||||
$data = $_POST['data']; |
|
||||||
//获取访客IP |
|
||||||
$sm['ip'] = $basis->getip(); |
|
||||||
//获取访客UA |
|
||||||
$sm['ua'] = $_SERVER['HTTP_USER_AGENT']; |
|
||||||
//获取当前时间 |
|
||||||
$sm['date'] = date('Y-m-d',time()); |
|
||||||
//获取图片URL |
|
||||||
$sm['url'] = $data['url']; |
|
||||||
//获取删除链接 |
|
||||||
$sm['delete'] = $data['delete']; |
|
||||||
|
|
||||||
//进行基本的判断 |
|
||||||
if((!isset($data)) || ($data == '') || (!is_array($data))) { |
|
||||||
echo '获取数据失败!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
//再次判断地址是否合法 |
|
||||||
if(!filter_var($sm['url'], FILTER_VALIDATE_URL)) { |
|
||||||
echo '不是合法的地址!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
if(!filter_var($sm['delete'], FILTER_VALIDATE_URL)) { |
|
||||||
echo '不是合法的地址!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
//写入数据库 |
|
||||||
$last_user_id = $database->insert("sm", [ |
|
||||||
"ip" => $sm['ip'], |
|
||||||
"ua" => $sm['ua'], |
|
||||||
"date" => $sm['date'], |
|
||||||
"url" => $sm['url'], |
|
||||||
"delete"=> $sm['delete'] |
|
||||||
]); |
|
||||||
//返回ID |
|
||||||
$smid = $database->id(); |
|
||||||
if($last_user_id) { |
|
||||||
$redata = array( |
|
||||||
"code" => 1, |
|
||||||
"id" => $smid, |
|
||||||
"msg" => "写入成功!" |
|
||||||
); |
|
||||||
echo json_encode($redata); |
|
||||||
exit; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$redata = array( |
|
||||||
"code" => 0, |
|
||||||
"id" => $smid, |
|
||||||
"msg" => "该图片可能已经上传过!" |
|
||||||
); |
|
||||||
echo json_encode($redata); |
|
||||||
} |
|
||||||
?> |
|
@ -1,96 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
const VERSION = "1.5.2"; |
|
||||||
|
|
||||||
class Tinify { |
|
||||||
private static $key = NULL; |
|
||||||
private static $appIdentifier = NULL; |
|
||||||
private static $proxy = NULL; |
|
||||||
|
|
||||||
private static $compressionCount = NULL; |
|
||||||
private static $client = NULL; |
|
||||||
|
|
||||||
public static function setKey($key) { |
|
||||||
self::$key = $key; |
|
||||||
self::$client = NULL; |
|
||||||
} |
|
||||||
|
|
||||||
public static function setAppIdentifier($appIdentifier) { |
|
||||||
self::$appIdentifier = $appIdentifier; |
|
||||||
self::$client = NULL; |
|
||||||
} |
|
||||||
|
|
||||||
public static function setProxy($proxy) { |
|
||||||
self::$proxy = $proxy; |
|
||||||
self::$client = NULL; |
|
||||||
} |
|
||||||
|
|
||||||
public static function getCompressionCount() { |
|
||||||
return self::$compressionCount; |
|
||||||
} |
|
||||||
|
|
||||||
public static function setCompressionCount($compressionCount) { |
|
||||||
self::$compressionCount = $compressionCount; |
|
||||||
} |
|
||||||
|
|
||||||
public static function getClient() { |
|
||||||
if (!self::$key) { |
|
||||||
throw new AccountException("Provide an API key with Tinify\setKey(...)"); |
|
||||||
} |
|
||||||
|
|
||||||
if (!self::$client) { |
|
||||||
self::$client = new Client(self::$key, self::$appIdentifier, self::$proxy); |
|
||||||
} |
|
||||||
|
|
||||||
return self::$client; |
|
||||||
} |
|
||||||
|
|
||||||
public static function setClient($client) { |
|
||||||
self::$client = $client; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function setKey($key) { |
|
||||||
return Tinify::setKey($key); |
|
||||||
} |
|
||||||
|
|
||||||
function setAppIdentifier($appIdentifier) { |
|
||||||
return Tinify::setAppIdentifier($appIdentifier); |
|
||||||
} |
|
||||||
|
|
||||||
function setProxy($proxy) { |
|
||||||
return Tinify::setProxy($proxy); |
|
||||||
} |
|
||||||
|
|
||||||
function getCompressionCount() { |
|
||||||
return Tinify::getCompressionCount(); |
|
||||||
} |
|
||||||
|
|
||||||
function compressionCount() { |
|
||||||
return Tinify::getCompressionCount(); |
|
||||||
} |
|
||||||
|
|
||||||
function fromFile($path) { |
|
||||||
return Source::fromFile($path); |
|
||||||
} |
|
||||||
|
|
||||||
function fromBuffer($string) { |
|
||||||
return Source::fromBuffer($string); |
|
||||||
} |
|
||||||
|
|
||||||
function fromUrl($string) { |
|
||||||
return Source::fromUrl($string); |
|
||||||
} |
|
||||||
|
|
||||||
function validate() { |
|
||||||
try { |
|
||||||
Tinify::getClient()->request("post", "/shrink"); |
|
||||||
} catch (AccountException $err) { |
|
||||||
if ($err->status == 429) return true; |
|
||||||
throw $err; |
|
||||||
} catch (ClientException $err) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
@ -1,160 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
class Client { |
|
||||||
const API_ENDPOINT = "https://api.tinify.com"; |
|
||||||
|
|
||||||
const RETRY_COUNT = 1; |
|
||||||
const RETRY_DELAY = 500; |
|
||||||
|
|
||||||
private $options; |
|
||||||
|
|
||||||
public static function userAgent() { |
|
||||||
$curl = curl_version(); |
|
||||||
return "Tinify/" . VERSION . " PHP/" . PHP_VERSION . " curl/" . $curl["version"]; |
|
||||||
} |
|
||||||
|
|
||||||
private static function caBundle() { |
|
||||||
return __DIR__ . "/../data/cacert.pem"; |
|
||||||
} |
|
||||||
|
|
||||||
function __construct($key, $app_identifier = NULL, $proxy = NULL) { |
|
||||||
$curl = curl_version(); |
|
||||||
|
|
||||||
if (!($curl["features"] & CURL_VERSION_SSL)) { |
|
||||||
throw new ClientException("Your curl version does not support secure connections"); |
|
||||||
} |
|
||||||
|
|
||||||
if ($curl["version_number"] < 0x071201) { |
|
||||||
$version = $curl["version"]; |
|
||||||
throw new ClientException("Your curl version ${version} is outdated; please upgrade to 7.18.1 or higher"); |
|
||||||
} |
|
||||||
|
|
||||||
$this->options = array( |
|
||||||
CURLOPT_BINARYTRANSFER => true, |
|
||||||
CURLOPT_RETURNTRANSFER => true, |
|
||||||
CURLOPT_HEADER => true, |
|
||||||
CURLOPT_USERPWD => "api:" . $key, |
|
||||||
CURLOPT_CAINFO => self::caBundle(), |
|
||||||
CURLOPT_SSL_VERIFYPEER => true, |
|
||||||
CURLOPT_USERAGENT => join(" ", array_filter(array(self::userAgent(), $app_identifier))), |
|
||||||
); |
|
||||||
|
|
||||||
if ($proxy) { |
|
||||||
$parts = parse_url($proxy); |
|
||||||
if (isset($parts["host"])) { |
|
||||||
$this->options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP; |
|
||||||
$this->options[CURLOPT_PROXY] = $parts["host"]; |
|
||||||
} else { |
|
||||||
throw new ConnectionException("Invalid proxy"); |
|
||||||
} |
|
||||||
|
|
||||||
if (isset($parts["port"])) { |
|
||||||
$this->options[CURLOPT_PROXYPORT] = $parts["port"]; |
|
||||||
} |
|
||||||
|
|
||||||
$creds = ""; |
|
||||||
if (isset($parts["user"])) $creds .= $parts["user"]; |
|
||||||
if (isset($parts["pass"])) $creds .= ":" . $parts["pass"]; |
|
||||||
|
|
||||||
if ($creds) { |
|
||||||
$this->options[CURLOPT_PROXYAUTH] = CURLAUTH_ANY; |
|
||||||
$this->options[CURLOPT_PROXYUSERPWD] = $creds; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function request($method, $url, $body = NULL) { |
|
||||||
$header = array(); |
|
||||||
if (is_array($body)) { |
|
||||||
if (!empty($body)) { |
|
||||||
$body = json_encode($body); |
|
||||||
array_push($header, "Content-Type: application/json"); |
|
||||||
} else { |
|
||||||
$body = NULL; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
for ($retries = self::RETRY_COUNT; $retries >= 0; $retries--) { |
|
||||||
if ($retries < self::RETRY_COUNT) { |
|
||||||
usleep(self::RETRY_DELAY * 1000); |
|
||||||
} |
|
||||||
|
|
||||||
$request = curl_init(); |
|
||||||
if ($request === false || $request === null) { |
|
||||||
throw new ConnectionException( |
|
||||||
"Error while connecting: curl extension is not functional or disabled." |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
curl_setopt_array($request, $this->options); |
|
||||||
|
|
||||||
$url = strtolower(substr($url, 0, 6)) == "https:" ? $url : self::API_ENDPOINT . $url; |
|
||||||
curl_setopt($request, CURLOPT_URL, $url); |
|
||||||
curl_setopt($request, CURLOPT_CUSTOMREQUEST, strtoupper($method)); |
|
||||||
|
|
||||||
if (count($header) > 0) { |
|
||||||
curl_setopt($request, CURLOPT_HTTPHEADER, $header); |
|
||||||
} |
|
||||||
|
|
||||||
if ($body) { |
|
||||||
curl_setopt($request, CURLOPT_POSTFIELDS, $body); |
|
||||||
} |
|
||||||
|
|
||||||
$response = curl_exec($request); |
|
||||||
|
|
||||||
if (is_string($response)) { |
|
||||||
$status = curl_getinfo($request, CURLINFO_HTTP_CODE); |
|
||||||
$headerSize = curl_getinfo($request, CURLINFO_HEADER_SIZE); |
|
||||||
curl_close($request); |
|
||||||
|
|
||||||
$headers = self::parseHeaders(substr($response, 0, $headerSize)); |
|
||||||
$body = substr($response, $headerSize); |
|
||||||
|
|
||||||
if (isset($headers["compression-count"])) { |
|
||||||
Tinify::setCompressionCount(intval($headers["compression-count"])); |
|
||||||
} |
|
||||||
|
|
||||||
if ($status >= 200 && $status <= 299) { |
|
||||||
return (object) array("body" => $body, "headers" => $headers); |
|
||||||
} |
|
||||||
|
|
||||||
$details = json_decode($body); |
|
||||||
if (!$details) { |
|
||||||
$message = sprintf("Error while parsing response: %s (#%d)", |
|
||||||
PHP_VERSION_ID >= 50500 ? json_last_error_msg() : "Error", |
|
||||||
json_last_error()); |
|
||||||
$details = (object) array( |
|
||||||
"message" => $message, |
|
||||||
"error" => "ParseError" |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
if ($retries > 0 && $status >= 500) continue; |
|
||||||
throw Exception::create($details->message, $details->error, $status); |
|
||||||
} else { |
|
||||||
$message = sprintf("%s (#%d)", curl_error($request), curl_errno($request)); |
|
||||||
curl_close($request); |
|
||||||
if ($retries > 0) continue; |
|
||||||
throw new ConnectionException("Error while connecting: " . $message); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected static function parseHeaders($headers) { |
|
||||||
if (!is_array($headers)) { |
|
||||||
$headers = explode("\r\n", $headers); |
|
||||||
} |
|
||||||
|
|
||||||
$res = array(); |
|
||||||
foreach ($headers as $header) { |
|
||||||
if (empty($header)) continue; |
|
||||||
$split = explode(":", $header, 2); |
|
||||||
if (count($split) === 2) { |
|
||||||
$res[strtolower($split[0])] = trim($split[1]); |
|
||||||
} |
|
||||||
} |
|
||||||
return $res; |
|
||||||
} |
|
||||||
} |
|
@ -1,36 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
class Exception extends \Exception { |
|
||||||
public $status; |
|
||||||
|
|
||||||
public static function create($message, $type, $status) { |
|
||||||
if ($status == 401 || $status == 429) { |
|
||||||
$klass = "Tinify\AccountException"; |
|
||||||
} else if($status >= 400 && $status <= 499) { |
|
||||||
$klass = "Tinify\ClientException"; |
|
||||||
} else if($status >= 500 && $status <= 599) { |
|
||||||
$klass = "Tinify\ServerException"; |
|
||||||
} else { |
|
||||||
$klass = "Tinify\Exception"; |
|
||||||
} |
|
||||||
|
|
||||||
if (empty($message)) $message = "No message was provided"; |
|
||||||
return new $klass($message, $type, $status); |
|
||||||
} |
|
||||||
|
|
||||||
function __construct($message, $type = NULL, $status = NULL) { |
|
||||||
$this->status = $status; |
|
||||||
if ($status) { |
|
||||||
parent::__construct($message . " (HTTP " . $status . "/" . $type . ")"); |
|
||||||
} else { |
|
||||||
parent::__construct($message); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
class AccountException extends Exception {} |
|
||||||
class ClientException extends Exception {} |
|
||||||
class ServerException extends Exception {} |
|
||||||
class ConnectionException extends Exception {} |
|
@ -1,36 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
class Result extends ResultMeta { |
|
||||||
protected $data; |
|
||||||
|
|
||||||
public function __construct($meta, $data) { |
|
||||||
$this->meta = $meta; |
|
||||||
$this->data = $data; |
|
||||||
} |
|
||||||
|
|
||||||
public function data() { |
|
||||||
return $this->data; |
|
||||||
} |
|
||||||
|
|
||||||
public function toBuffer() { |
|
||||||
return $this->data; |
|
||||||
} |
|
||||||
|
|
||||||
public function toFile($path) { |
|
||||||
return file_put_contents($path, $this->toBuffer()); |
|
||||||
} |
|
||||||
|
|
||||||
public function size() { |
|
||||||
return intval($this->meta["content-length"]); |
|
||||||
} |
|
||||||
|
|
||||||
public function mediaType() { |
|
||||||
return $this->meta["content-type"]; |
|
||||||
} |
|
||||||
|
|
||||||
public function contentType() { |
|
||||||
return $this->mediaType(); |
|
||||||
} |
|
||||||
} |
|
@ -1,23 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
class ResultMeta { |
|
||||||
protected $meta; |
|
||||||
|
|
||||||
public function __construct($meta) { |
|
||||||
$this->meta = $meta; |
|
||||||
} |
|
||||||
|
|
||||||
public function width() { |
|
||||||
return intval($this->meta["image-width"]); |
|
||||||
} |
|
||||||
|
|
||||||
public function height() { |
|
||||||
return intval($this->meta["image-height"]); |
|
||||||
} |
|
||||||
|
|
||||||
public function location() { |
|
||||||
return isset($this->meta["location"]) ? $this->meta["location"] : null; |
|
||||||
} |
|
||||||
} |
|
@ -1,69 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace Tinify; |
|
||||||
|
|
||||||
class Source { |
|
||||||
private $url, $commands; |
|
||||||
|
|
||||||
public static function fromFile($path) { |
|
||||||
return self::fromBuffer(file_get_contents($path)); |
|
||||||
} |
|
||||||
|
|
||||||
public static function fromBuffer($string) { |
|
||||||
$response = Tinify::getClient()->request("post", "/shrink", $string); |
|
||||||
return new self($response->headers["location"]); |
|
||||||
} |
|
||||||
|
|
||||||
public static function fromUrl($url) { |
|
||||||
$body = array("source" => array("url" => $url)); |
|
||||||
$response = Tinify::getClient()->request("post", "/shrink", $body); |
|
||||||
return new self($response->headers["location"]); |
|
||||||
} |
|
||||||
|
|
||||||
public function __construct($url, $commands = array()) { |
|
||||||
$this->url = $url; |
|
||||||
$this->commands = $commands; |
|
||||||
} |
|
||||||
|
|
||||||
public function preserve() { |
|
||||||
$options = $this->flatten(func_get_args()); |
|
||||||
$commands = array_merge($this->commands, array("preserve" => $options)); |
|
||||||
return new self($this->url, $commands); |
|
||||||
} |
|
||||||
|
|
||||||
public function resize($options) { |
|
||||||
$commands = array_merge($this->commands, array("resize" => $options)); |
|
||||||
return new self($this->url, $commands); |
|
||||||
} |
|
||||||
|
|
||||||
public function store($options) { |
|
||||||
$response = Tinify::getClient()->request("post", $this->url, |
|
||||||
array_merge($this->commands, array("store" => $options))); |
|
||||||
return new Result($response->headers, $response->body); |
|
||||||
} |
|
||||||
|
|
||||||
public function result() { |
|
||||||
$response = Tinify::getClient()->request("get", $this->url, $this->commands); |
|
||||||
return new Result($response->headers, $response->body); |
|
||||||
} |
|
||||||
|
|
||||||
public function toFile($path) { |
|
||||||
return $this->result()->toFile($path); |
|
||||||
} |
|
||||||
|
|
||||||
public function toBuffer() { |
|
||||||
return $this->result()->toBuffer(); |
|
||||||
} |
|
||||||
|
|
||||||
private static function flatten($options) { |
|
||||||
$flattened = array(); |
|
||||||
foreach ($options as $option) { |
|
||||||
if (is_array($option)) { |
|
||||||
$flattened = array_merge($flattened, $option); |
|
||||||
} else { |
|
||||||
array_push($flattened, $option); |
|
||||||
} |
|
||||||
} |
|
||||||
return $flattened; |
|
||||||
} |
|
||||||
} |
|
@ -1,37 +0,0 @@ |
|||||||
<?php |
|
||||||
//此页面需要配置定时任务(crontab)完成 |
|
||||||
include_once("./class/class.user.php"); |
|
||||||
|
|
||||||
//获取密码 |
|
||||||
@$pass = $_GET['pass']; |
|
||||||
if($pass != $config['password']){ |
|
||||||
echo '密码错误!'; |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
$datas = $basis->unknown(); |
|
||||||
|
|
||||||
//遍历数据 |
|
||||||
foreach( $datas as $key => $value ) |
|
||||||
{ |
|
||||||
$url = $config['domain'].'dispose.php?id='.$value['id']; |
|
||||||
|
|
||||||
//echo $url; |
|
||||||
|
|
||||||
//请求鉴黄接口 |
|
||||||
$curl = curl_init($url); |
|
||||||
|
|
||||||
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"); |
|
||||||
curl_setopt($curl, CURLOPT_FAILONERROR, true); |
|
||||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
||||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
#设置超时时间,最小为1s(可选) |
|
||||||
curl_setopt($curl , CURLOPT_TIMEOUT, 3); |
|
||||||
|
|
||||||
$html = curl_exec($curl); |
|
||||||
curl_close($curl); |
|
||||||
} |
|
||||||
echo '处理完成!'; |
|
||||||
?> |
|
@ -1,102 +0,0 @@ |
|||||||
<?php |
|
||||||
//载入配置文件 |
|
||||||
include_once("./class/class.user.php"); |
|
||||||
//阻止用户直接访问 |
|
||||||
//if( !strstr($_SERVER['HTTP_REFERER'],$config['domain']) ) |
|
||||||
//{ |
|
||||||
// $basis->re_error('非法请求!'); |
|
||||||
//} |
|
||||||
|
|
||||||
//检查用户是否登录 |
|
||||||
$status = $basis->check($config); |
|
||||||
|
|
||||||
|
|
||||||
//检查用户是否登陆来判断上传目录 |
|
||||||
if($status == 'islogin') { |
|
||||||
//设置上传路径 |
|
||||||
$updir = $config['admindir']; |
|
||||||
} |
|
||||||
else{ |
|
||||||
$updir = $config['userdir']; |
|
||||||
//限制用户上传数量 |
|
||||||
$basis->limitnum(); |
|
||||||
} |
|
||||||
|
|
||||||
//获取上传者信息 |
|
||||||
$ip = $basis->getip(); |
|
||||||
$ua = $_SERVER['HTTP_USER_AGENT']; |
|
||||||
$date = date('Y-m-d',time()); |
|
||||||
//载入上传类 |
|
||||||
include('./class/class.upload.php'); |
|
||||||
|
|
||||||
//上传方法 |
|
||||||
$handle = new upload($_FILES['file']); |
|
||||||
if ($handle->uploaded) { |
|
||||||
$handle->file_new_name_body = 'image_resized'; |
|
||||||
//允许上传大小2m |
|
||||||
$handle->file_max_size = '2097152'; |
|
||||||
//允许的MIME类型,仅运行上传图片 |
|
||||||
$handle->allowed = array('image/*'); |
|
||||||
|
|
||||||
// 当前月份 |
|
||||||
$current_time = date('ym',time()); |
|
||||||
//上传路径:目录 + 时间 |
|
||||||
$handle->process('../'.$updir.'/'.$current_time."/"); |
|
||||||
if ($handle->processed) { |
|
||||||
//获取站点域名 |
|
||||||
$domain = $config['domain']; |
|
||||||
//生成文件hash |
|
||||||
$fhash = hash_file("md5",$handle->file_dst_pathname,FALSE); |
|
||||||
$fhash = substr($fhash,8,16); |
|
||||||
//新的文件名(../temp/1804/\d64c8036c0605175.jpg) |
|
||||||
$new_img = $handle->file_dst_path.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
//图片URL地址 |
|
||||||
$imgurl = $domain.$updir.'/'.$current_time.'/'.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
//图片路径(temp/1804/d64c8036c0605175.jpg) |
|
||||||
$imgdir = $updir.'/'.$current_time.'/'.$fhash.'.'.$handle->file_dst_name_ext; |
|
||||||
|
|
||||||
//判断文件是否已经存在 |
|
||||||
if(!is_file($new_img)) { |
|
||||||
//对文件更名 |
|
||||||
rename($handle->file_dst_pathname,$new_img); |
|
||||||
} |
|
||||||
else{ |
|
||||||
//删除原始文件 |
|
||||||
unlink($handle->file_dst_pathname); |
|
||||||
} |
|
||||||
|
|
||||||
//检查某张图片是否已经上传过,如果已经上传了,直接返回数据并终止操作 |
|
||||||
$basis->isupload($imgdir); |
|
||||||
|
|
||||||
//没有上传过的图片,继续写入数据库 |
|
||||||
$last_user_id = $database->insert("imginfo", [ |
|
||||||
"path" => $imgdir, |
|
||||||
"ip" => $ip, |
|
||||||
"ua" => $ua, |
|
||||||
"date" => $date, |
|
||||||
"dir" => $updir, |
|
||||||
"compress" => 0, |
|
||||||
"level" => 0 |
|
||||||
]); |
|
||||||
//返回最后的ID |
|
||||||
$account_id = $database->id(); |
|
||||||
//上传成功,返回json数据 |
|
||||||
$redata = array( |
|
||||||
"code" => 1, |
|
||||||
"id" => $account_id, |
|
||||||
"url" => $imgurl, |
|
||||||
"width" => $handle->image_dst_x, |
|
||||||
"height" => $handle->image_dst_y |
|
||||||
); |
|
||||||
echo $redata = json_encode($redata); |
|
||||||
$handle->clean(); |
|
||||||
} else { |
|
||||||
//上传出现错误,返回报错信息 |
|
||||||
$redata = array( |
|
||||||
"code" => 0, |
|
||||||
"msg" => $handle->error |
|
||||||
); |
|
||||||
echo json_encode($redata); |
|
||||||
} |
|
||||||
} |
|
||||||
?> |
|
@ -1,7 +0,0 @@ |
|||||||
<?php |
|
||||||
include_once("class/class.admin.php"); |
|
||||||
|
|
||||||
@$arr = $_POST['arr']; |
|
||||||
|
|
||||||
$pic->urlup($arr); |
|
||||||
?> |
|
@ -1,127 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "ImgURL - 简单、纯粹的图床程序。"; |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
//判断程序是否已安装 |
|
||||||
$homedir = __DIR__; |
|
||||||
$homedir = str_replace("\\","/",$homedir); |
|
||||||
//$homedir = str_replace("tpl/user","",$homedir); |
|
||||||
$lockfile = $homedir.'/config.php'; |
|
||||||
|
|
||||||
if(!file_exists($lockfile)){ |
|
||||||
header("location:./install.php?setup=1"); |
|
||||||
} |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg12 layui-col-xs12"> |
|
||||||
<div class="msg"><i class="layui-icon"></i> 注意:您上传的图片将会公开显示,勿上传隐私图片。游客限制每天10张,最大支持2M</div> |
|
||||||
<!-- 上传图片表单 --> |
|
||||||
<div class="layui-upload-drag" id="upimg"> |
|
||||||
<i class="layui-icon"></i> |
|
||||||
<p>将图片拖拽到此处,支持Ctrl + V粘贴上传</p> |
|
||||||
</div> |
|
||||||
<!-- 上传图片表单END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div style = "clear:both;"></div> |
|
||||||
<!-- 图片上传成功 --> |
|
||||||
<div class="layui-row" id = "upok"> |
|
||||||
<div> |
|
||||||
<div id="showpic" class = "layui-col-lg5"><a href="" target = "_blank"><img src="./static/loading32.gif"></a></div> |
|
||||||
<div id="piclink" class = "layui-col-lg6 layui-col-md-offset1"> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="400"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id = "url"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id = "html"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id = "markdown"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id = "bbcode"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 图片上传成功END --> |
|
||||||
</div> |
|
||||||
<!--Ctrl + V粘贴上传--> |
|
||||||
<script> |
|
||||||
var load1 = document.querySelector("#upimg"); |
|
||||||
|
|
||||||
// 实例化即可 |
|
||||||
new ctrlVUtil({ |
|
||||||
uploadUrl: "functions/cvupload.php", |
|
||||||
targetElement: load1, |
|
||||||
isCompleteImg:false, |
|
||||||
data:{ |
|
||||||
name:"alanzhang", |
|
||||||
}, |
|
||||||
success:function(data){ |
|
||||||
//转为对象 |
|
||||||
var res = data; |
|
||||||
//上传成功 |
|
||||||
if(res.code == 1){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
$("#showpic a").attr('href',res.url); |
|
||||||
$("#showpic img").attr('src',res.url); |
|
||||||
$("#url").val(res.url); |
|
||||||
$("#html").val("<img src = '" + res.url + "' />"); |
|
||||||
$("#markdown").val("![](" + res.url + ")"); |
|
||||||
$("#bbcode").val("[img]" + res.url + "[/img]"); |
|
||||||
$("#upok").show(); |
|
||||||
//请求接口处理图片 |
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
if(obj.level == null){ |
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
else{ |
|
||||||
layer.msg(res.msg); |
|
||||||
} |
|
||||||
}, |
|
||||||
error: function(error){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg('上传失败!'); |
|
||||||
} |
|
||||||
}); |
|
||||||
</script> |
|
||||||
<!--粘贴上传END--> |
|
||||||
<?php |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
?> |
|
@ -1,41 +0,0 @@ |
|||||||
<?php |
|
||||||
//载入类 |
|
||||||
//echo __DIR__."/functions/class/class.install.php"; |
|
||||||
include_once(__DIR__."/functions/class/class.install.php"); |
|
||||||
@$setup = (int)$_GET['setup']; |
|
||||||
|
|
||||||
$install = new Install; |
|
||||||
$statusarr = $install->check(); |
|
||||||
|
|
||||||
$info = $install->info(); |
|
||||||
|
|
||||||
switch ($setup) { |
|
||||||
case 1: |
|
||||||
//载入模板 |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
include_once("./tpl/user/install1.php"); |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
break; |
|
||||||
case 2: |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
include_once("./tpl/user/install2.php"); |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
break; |
|
||||||
case 3: |
|
||||||
//获取用户名 |
|
||||||
@$data['user'] = $_POST['user']; |
|
||||||
//获取用户密码 |
|
||||||
@$data['pass1'] = $_POST['pass1']; |
|
||||||
@$data['pass2'] = $_POST['pass2']; |
|
||||||
@$data['domain'] = $_POST['domain']; |
|
||||||
@$data['homedir'] = $_POST['homedir']; |
|
||||||
$install->setup($data); |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
include_once("./tpl/user/install3.php"); |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
break; |
|
||||||
default: |
|
||||||
header("location:./install.php?setup=1"); |
|
||||||
break; |
|
||||||
} |
|
||||||
?> |
|
@ -1,203 +0,0 @@ |
|||||||
<!DOCTYPE html> |
|
||||||
<html lang="zh-cmn-Hans" xmlns="http://www.w3.org/1999/xhtml"> |
|
||||||
<head> |
|
||||||
<meta charset="utf-8" /> |
|
||||||
<title>ImgURL - 简单、纯粹的图床程序。</title> |
|
||||||
<meta name="generator" content="EverEdit" /> |
|
||||||
<meta name="author" content="xiaoz.me" /> |
|
||||||
<meta name="keywords" content="ImgURL,免费图床,图床程序,小z图床,XZ Pic" /> |
|
||||||
<meta name="description" content="ImgURL是一个简单、纯粹的图床程序,让个人图床多一个选择。" /> |
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
||||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> |
|
||||||
<link rel="Bookmark" href="favicon.ico" /> |
|
||||||
<link rel="stylesheet" href="./static/layui/css/layui.css"> |
|
||||||
<link rel="stylesheet" href="./static/style.css?v=1.2"> |
|
||||||
<script src = "https://libs.xiaoz.top/clipBoard.js/clipBoard.min.js"></script> |
|
||||||
|
|
||||||
<style type="text/css" media="screen"> |
|
||||||
#imgbtn{ |
|
||||||
display: none; |
|
||||||
} |
|
||||||
</style> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<div class="layui-container"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg12 layui-col-xs12"> |
|
||||||
<div class="msg"><i class="layui-icon"></i> 注意:您上传的图片将会公开显示,勿上传隐私图片。此项目依赖于:<a href="https://imgurl.org/" target = "_blank">https://imgurl.org/</a></div> |
|
||||||
<!--选项卡测试--> |
|
||||||
<div class="layui-tab layui-tab-brief" lay-filter="uptab"> |
|
||||||
<ul class="layui-tab-title"> |
|
||||||
<li class="layui-this">ImgURL</li> |
|
||||||
<li>SM.MS</li> |
|
||||||
<li>关于</li> |
|
||||||
</ul> |
|
||||||
<div class="layui-tab-content"> |
|
||||||
<!--上传到ImgURL--> |
|
||||||
<div class="layui-tab-item layui-show"> |
|
||||||
<!-- 上传图片表单 --> |
|
||||||
<div class="layui-upload-drag" id="upimg"> |
|
||||||
<i class="layui-icon"></i> |
|
||||||
<p>将图片拖拽到此处,或将鼠标移动到这里支持Ctrl + V上传</p> |
|
||||||
</div> |
|
||||||
<!-- 上传图片表单END --> |
|
||||||
</div> |
|
||||||
<!--上传到sm.ms--> |
|
||||||
<div class="layui-tab-item"> |
|
||||||
<div class = "smfile"> |
|
||||||
<a href="javascript:;" class="file"> |
|
||||||
<input type="file" name="smfile" id="sm"> |
|
||||||
<i class="layui-icon" style = "font-size:6em;"></i> |
|
||||||
</a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--捐赠--> |
|
||||||
<div class="layui-tab-item"> |
|
||||||
<h1>ImgURL</h1> |
|
||||||
<p>ImgURL是一款简洁、纯粹的图床程序,使用PHP + Sqlite开发,开箱即用。</p> |
|
||||||
<br /><h2>主要功能</h2><br /> |
|
||||||
<ul> |
|
||||||
<li>拽拖上传图片、实时预览</li> |
|
||||||
<li>一键生成链接,一键复制</li> |
|
||||||
<li>图片管理</li> |
|
||||||
<li>TinyPNG图片压缩</li> |
|
||||||
<li>图片智能鉴黄</li> |
|
||||||
</ul> |
|
||||||
<br /><h2>使用说明</h2><br /> |
|
||||||
<ul> |
|
||||||
<li>图片最大上传限制为2M</li> |
|
||||||
<li>游客每天限制上传10张图片</li> |
|
||||||
<li>勿上传暴力、色情、反动图片,否则后果自负</li> |
|
||||||
<li>如果您使用ImgURL代表同意以上协议</li> |
|
||||||
</ul> |
|
||||||
<br /><h2>联系我</h2><br /> |
|
||||||
<ul> |
|
||||||
<li>Blog:<a href = "https://www.xiaoz.me/" target = "_blank">https://www.xiaoz.me/</a></li> |
|
||||||
<li>QQ:337003006</li> |
|
||||||
</ul> |
|
||||||
<br /> |
|
||||||
<p>扫描下方二维码请我喝一杯咖啡</p><br /> |
|
||||||
<p><img src="https://imgurl.org/upload/1712/cb349aa4a1b95997.png" alt=""></p> |
|
||||||
</div> |
|
||||||
<!--捐赠--> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!--选项卡END--> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div style = "clear:both;"></div> |
|
||||||
<!-- 图片上传成功 --> |
|
||||||
<div class="layui-row" id = "upok" style = "margin-top:1em;"> |
|
||||||
<div> |
|
||||||
<div id="showpic" class = "layui-col-lg5"><a href="" target = "_blank"><img src=""></a></div> |
|
||||||
<div id="piclink" class = "layui-col-lg6 layui-col-md-offset1"> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="400"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id = "url"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id = "html"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id = "markdown"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id = "bbcode"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 图片上传成功END --> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div style = "clear:both;"></div> |
|
||||||
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script> |
|
||||||
<script src = "./static/ctrv-upload.js"></script> |
|
||||||
<script src="./static/layui/layui.js"></script> |
|
||||||
<script src="./static/embed.js?v=1.2"></script> |
|
||||||
<script> |
|
||||||
//隐藏按钮 |
|
||||||
//setTimeout('$("#imgbtn").remove()',100) |
|
||||||
layui.use(['element','layer'],function(){ |
|
||||||
var element = layui.element; |
|
||||||
var layer = layui.layer; |
|
||||||
element.on('tab(uptab)', function(data){ |
|
||||||
//console.log(this); //当前Tab标题所在的原始DOM元素 |
|
||||||
//console.log(data.index); //得到当前Tab的所在下标 |
|
||||||
//console.log(data.elem); //得到当前的Tab大容器 |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
var load1 = document.querySelector("body"); |
|
||||||
|
|
||||||
// 实例化即可 |
|
||||||
new ctrlVUtil({ |
|
||||||
uploadUrl: "functions/cvupload.php", |
|
||||||
targetElement: load1, |
|
||||||
isCompleteImg:false, |
|
||||||
data:{ |
|
||||||
name:"alanzhang", |
|
||||||
}, |
|
||||||
success:function(data){ |
|
||||||
//转为对象 |
|
||||||
var res = data; |
|
||||||
//上传成功 |
|
||||||
if(res.code == 1){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
$("#showpic a").attr('href',res.url); |
|
||||||
$("#showpic img").attr('src',res.url); |
|
||||||
$("#url").val(res.url); |
|
||||||
$("#html").val("<img src = '" + res.url + "' />"); |
|
||||||
$("#markdown").val("![](" + res.url + ")"); |
|
||||||
$("#bbcode").val("[img]" + res.url + "[/img]"); |
|
||||||
$("#upok").show(); |
|
||||||
//请求接口处理图片 |
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
if(obj.level == null){ |
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
else{ |
|
||||||
layer.msg(res.msg); |
|
||||||
} |
|
||||||
}, |
|
||||||
error: function(error){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg('上传失败!'); |
|
||||||
} |
|
||||||
}); |
|
||||||
</script> |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,6 +0,0 @@ |
|||||||
User-Agent: * |
|
||||||
Disallow: /admin/ |
|
||||||
Disallow: /db/ |
|
||||||
Disallow: /functions/ |
|
||||||
Disallow: /static/ |
|
||||||
Disallow: /tpl/ |
|
@ -1,68 +0,0 @@ |
|||||||
<?php |
|
||||||
$title = "ImgURL - 简单、纯粹的图床程序。"; |
|
||||||
include_once("./tpl/user/header.php"); |
|
||||||
?> |
|
||||||
|
|
||||||
<div class="layui-container"> |
|
||||||
<div class="layui-row"> |
|
||||||
<div class="layui-col-lg12 layui-col-xs10"> |
|
||||||
<div class="msg"><i class="layui-icon"></i> 该功能可以将图片上传至SM.MS图床。</div> |
|
||||||
<!-- 上传图片表单 --> |
|
||||||
<div class = "smfile"> |
|
||||||
<a href="javascript:;" class="file"> |
|
||||||
<input type="file" name="smfile" id="sm"> |
|
||||||
<i class="layui-icon" style = "font-size:6em;"></i> |
|
||||||
</a> |
|
||||||
</div> |
|
||||||
<!-- 上传图片表单END --> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div style = "clear:both;"></div> |
|
||||||
<!-- 图片上传成功 --> |
|
||||||
<div class="layui-row" id = "upok"> |
|
||||||
<div> |
|
||||||
<div id="showpic" class = "layui-col-lg5"><a href="" target = "_blank"><img src=""></a></div> |
|
||||||
<div id="piclink" class = "layui-col-lg6 layui-col-md-offset1"> |
|
||||||
<table class="layui-table" lay-skin="nob"> |
|
||||||
<colgroup> |
|
||||||
<col width="80"> |
|
||||||
<col width="400"> |
|
||||||
<col> |
|
||||||
</colgroup> |
|
||||||
<tbody> |
|
||||||
<tr> |
|
||||||
<td>URL</td> |
|
||||||
<td><input type="text" class="layui-input" id = "url"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('url')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>HTML</td> |
|
||||||
<td><input type="text" class="layui-input" id = "html"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('html')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>MarkDown</td> |
|
||||||
<td><input type="text" class="layui-input" id = "markdown"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('markdown')">复制</a></td> |
|
||||||
</tr> |
|
||||||
<tr> |
|
||||||
<td>BBcode</td> |
|
||||||
<td><input type="text" class="layui-input" id = "bbcode"></td> |
|
||||||
<td><a href="javascript:;" class = "layui-btn layui-btn-sm" onclick = "copy('bbcode')">复制</a></td> |
|
||||||
</tr> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<!-- 图片上传成功END --> |
|
||||||
</div> |
|
||||||
|
|
||||||
<?php |
|
||||||
include_once("./tpl/user/footer.php"); |
|
||||||
?> |
|
||||||
<script> |
|
||||||
$(document).ready(function(){ |
|
||||||
$("#smfile input:text").attr("name",'smfile'); |
|
||||||
}); |
|
||||||
</script> |
|
Before Width: | Height: | Size: 9.5 KiB |
@ -1,8 +0,0 @@ |
|||||||
/** |
|
||||||
* clipboard.js |
|
||||||
* width clipboard.js, you can copy cut and paste clipboard data |
|
||||||
* the main methods ard execCommand for modern browser and clipboardData for ie |
|
||||||
* @author ganzw@gmail.com |
|
||||||
* @url https://github.com/baixuexiyang/clipBoard.js
|
|
||||||
*/ |
|
||||||
!function(t,e){"undefined"!=typeof module&&module.exports?module.exports=e():"function"==typeof define&&define.amd?define(e):this[t]=e()}("clipBoard",function(){"use strict";function t(t,e){this.options=e||{},this.tar=t[0]||t,this.options.copy&&this.copyd(),this.options.cut&&this.cut(),this.options.paste&&this.paste()}return t.prototype.copyd=function(t){if(this.options.beforeCopy&&this.options.beforeCopy(),t=t||this.tar.value||this.tar.innerText,this.options.copy&&(t=this.options.copy()),document.execCommand){var e=document.createElement("SPAN");if(e.textContent=t,document.body.appendChild(e),document.selection){var o=document.body.createTextRange();o.moveToElementText(e),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}document.execCommand("copy"),e.remove?e.remove():e.removeNode(!0)}window.clipboardData&&window.clipboardData.setData("text",t),this.options.afterCopy&&this.options.afterCopy()},t.prototype.cut=function(){if("text"===this.tar.type||"textarea"===this.tar.type){if(this.options.beforeCut&&this.options.beforeCut(),document.execCommand){var t=this.tar;if(document.selection){var e=document.body.createTextRange();e.moveToElementText(t),e.select()}else window.getSelection&&t.select();document.execCommand("cut")}window.clipboardData&&(window.clipboardData.setData("text",this.tar.value),this.tar.value=""),this.options.afterCut&&this.options.afterCut()}},t.prototype.paste=function(){if("text"===this.tar.type||"textarea"===this.tar.type){if(this.options.beforePaste&&this.options.beforePaste(),document.execCommand){var t=this.tar;if(t.setSelectionRange)t.focus(),t.setSelectionRange(t.value.length,t.value.length);else if(t.createTextRange){var e=t.createTextRange();e.collapse(!0),e.moveEnd("character",t.value.length),e.moveStart("character",t.value.length),e.select()}document.execCommand("paste")}!document.execCommand&&window.clipboardData&&(this.tar.value+=window.clipboardData.getData("text")),this.options.afterPaste&&this.options.afterPaste()}},t}); |
|
@ -1,112 +0,0 @@ |
|||||||
'use strict'; |
|
||||||
(function(root, factory){ |
|
||||||
if (typeof define === 'function' && define.amd) { |
|
||||||
define([], factory); |
|
||||||
} else if (typeof exports === 'object') { |
|
||||||
module.exports = factory(); |
|
||||||
} else { |
|
||||||
root.ctrlVUtil = factory(); |
|
||||||
} |
|
||||||
}(this, function(){ |
|
||||||
function ctrlVUtil(option){ |
|
||||||
this.targetElement = null; |
|
||||||
this.uploadInput = null; |
|
||||||
this.uploadUrl = "http://www.oa.com/screenshot/create-file"; |
|
||||||
this.isCompleteImg = false; |
|
||||||
var that = this; |
|
||||||
that.mixinConfig(option); |
|
||||||
that.targetElement.addEventListener("mouseover", function() { |
|
||||||
that.uploadInput.focus(); |
|
||||||
}); |
|
||||||
that.targetElement.addEventListener("click", function() { |
|
||||||
that.uploadInput.focus(); |
|
||||||
}); |
|
||||||
that.targetElement.addEventListener("mouseleave", function() { |
|
||||||
that.uploadInput.blur(); |
|
||||||
}); |
|
||||||
that.uploadInput.addEventListener('paste', function(e) { |
|
||||||
that.handlePaste(e); |
|
||||||
}); |
|
||||||
} |
|
||||||
ctrlVUtil.prototype.mixinConfig = function(option){ |
|
||||||
this.targetElement = option.targetElement || document.querySelector(".js-upload"); |
|
||||||
this.uploadInput = this.createInputTarget(); |
|
||||||
this.isCompleteImg = "isCompleteImg" in option ? option.isCompleteImg : this.isCompleteImg; |
|
||||||
this.uploadUrl = option.uploadUrl || this.uploadUrl; |
|
||||||
this.data = option.data; |
|
||||||
this.success = option.success || function(data) { |
|
||||||
console.log(data); |
|
||||||
}; |
|
||||||
this.error = option.error || function(error) { |
|
||||||
console.log(error); |
|
||||||
}; |
|
||||||
}; |
|
||||||
ctrlVUtil.prototype.createInputTarget = function() { |
|
||||||
var imgContinaer = document.createElement("div"); |
|
||||||
imgContinaer.style.cssText = "border:none;margin:0;padding:0;font-size: 0;height:1px;width:1px;opacity:0;position:fixed;z-index:-1;"; |
|
||||||
imgContinaer.contentEditable = true; |
|
||||||
imgContinaer.class = "ui-ctrlv-uploadInput"; |
|
||||||
this.targetElement.parentNode.insertBefore(imgContinaer, this.targetElement); |
|
||||||
return imgContinaer; |
|
||||||
}; |
|
||||||
ctrlVUtil.prototype.handlePaste = function(e){ |
|
||||||
var that = this; |
|
||||||
if (e && e.clipboardData && e.clipboardData.items) { |
|
||||||
var item = e.clipboardData.items[0], |
|
||||||
that = this; |
|
||||||
if (item.type.indexOf('image') != -1) { |
|
||||||
var blob = item.getAsFile(); |
|
||||||
var fileReader = new FileReader(); |
|
||||||
fileReader.readAsDataURL(blob); |
|
||||||
fileReader.addEventListener('load', function(e) { |
|
||||||
var file = e.target.result; |
|
||||||
that.send(file); |
|
||||||
}, false); |
|
||||||
} else { |
|
||||||
layer.msg('请粘贴image类型!'); |
|
||||||
} |
|
||||||
} else { |
|
||||||
setTimeout(function() { |
|
||||||
var $img = that.uploadInput.querySelector("img"); |
|
||||||
if ($img) { |
|
||||||
that.send($img.src); |
|
||||||
} else { |
|
||||||
layer.msg('当前浏览器不支持剪贴板操作!'); |
|
||||||
return; |
|
||||||
} |
|
||||||
}, 200); |
|
||||||
} |
|
||||||
}; |
|
||||||
ctrlVUtil.prototype.send = function(imgcontent) { |
|
||||||
layer.load(); |
|
||||||
var that = this; |
|
||||||
that.uploadInput.innerHTML = ""; |
|
||||||
var data = that.data || {}; |
|
||||||
data.content = this.isCompleteImg ? imgcontent : imgcontent.split(';')[1].split(',')[1]; |
|
||||||
var xhr = new XMLHttpRequest(); |
|
||||||
xhr.open("post",that.uploadUrl,true); |
|
||||||
xhr.onreadystatechange = function(e) { |
|
||||||
if (xhr.readyState == 4) { |
|
||||||
if (xhr.status == 200) { |
|
||||||
var ret = JSON.parse(xhr.responseText); |
|
||||||
that.success && that.success(ret); |
|
||||||
} else { |
|
||||||
that.error && that.error(e, xhr); |
|
||||||
} |
|
||||||
} |
|
||||||
}; |
|
||||||
xhr.onerror = function(e) { |
|
||||||
that.error && that.error(e, xhr); |
|
||||||
}; |
|
||||||
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); |
|
||||||
var dataString = []; |
|
||||||
for(var key in data){ |
|
||||||
dataString.push(key+"="+encodeURIComponent(data[key])); |
|
||||||
} |
|
||||||
xhr.send(dataString.join("&")); |
|
||||||
}; |
|
||||||
ctrlVUtil.prototype.alertMsg = function(content){ |
|
||||||
alert(content); |
|
||||||
} |
|
||||||
return ctrlVUtil; |
|
||||||
})); |
|
@ -1,501 +0,0 @@ |
|||||||
//layui 根目录配置
|
|
||||||
layui.config({ |
|
||||||
base: '/static/layui/', |
|
||||||
}) |
|
||||||
//载入layui组建
|
|
||||||
layui.use(['layer', 'form','element','upload','flow'], function(){ |
|
||||||
var form = layui.form; |
|
||||||
var layer = layui.layer; |
|
||||||
var element = layui.element; |
|
||||||
var upload = layui.upload; |
|
||||||
var flow = layui.flow; |
|
||||||
//图片懒加载
|
|
||||||
flow.lazyimg({ |
|
||||||
elem:'#found-img img' |
|
||||||
}); |
|
||||||
flow.lazyimg({ |
|
||||||
elem:'#adminpic img' |
|
||||||
}); |
|
||||||
//图片查看器
|
|
||||||
layer.photos({ |
|
||||||
photos: '#adminpic' |
|
||||||
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
|
|
||||||
}); |
|
||||||
layer.photos({ |
|
||||||
photos: '#found-img' |
|
||||||
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
|
|
||||||
}); |
|
||||||
|
|
||||||
//首页拖拽上传
|
|
||||||
upload.render({ |
|
||||||
elem: '#upimg' |
|
||||||
,url: 'functions/upload.php' |
|
||||||
,size: 2048 //限制上传大小为2M
|
|
||||||
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
|
||||||
layer.load(); //上传loading
|
|
||||||
} |
|
||||||
,done: function(res){ |
|
||||||
//如果上传失败
|
|
||||||
if(res.code == 0){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: res.msg |
|
||||||
}); |
|
||||||
layer.closeAll('loading'); |
|
||||||
} |
|
||||||
else if(res.code == 1){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
$("#showpic a").attr('href',res.url); |
|
||||||
$("#showpic img").attr('src',res.url); |
|
||||||
$("#url").val(res.url); |
|
||||||
$("#html").val("<img src = '" + res.url + "' />"); |
|
||||||
$("#markdown").val("![](" + res.url + ")"); |
|
||||||
$("#bbcode").val("[img]" + res.url + "[/img]"); |
|
||||||
$("#upok").show(); |
|
||||||
//请求接口处理图片
|
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
if(obj.level == null){ |
|
||||||
$.get("./dispose.php?id="+res.id,function(data,status){ |
|
||||||
var obj = eval('(' + data + ')'); |
|
||||||
if(obj.level == 3){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: '请勿上传违规图片!' |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
//上传到sm.ms
|
|
||||||
upload.render({ |
|
||||||
elem: '#sm' |
|
||||||
,url: 'https://sm.ms/api/upload' |
|
||||||
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
|
||||||
layer.load(); //上传loading
|
|
||||||
} |
|
||||||
,done: function(res){ |
|
||||||
//如果上传失败
|
|
||||||
if(res.code == 'error'){ |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示' |
|
||||||
,content: res.msg |
|
||||||
}); |
|
||||||
layer.closeAll('loading'); |
|
||||||
} |
|
||||||
else if(res.code == 'success'){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
$("#showpic a").attr('href',res.data.url); |
|
||||||
$("#showpic img").attr('src',res.data.url); |
|
||||||
$("#url").val(res.data.url); |
|
||||||
$("#html").val("<img src = '" + res.data.url + "' />"); |
|
||||||
$("#markdown").val("![](" + res.data.url + ")"); |
|
||||||
$("#bbcode").val("[img]" + res.data.url + "[/img]"); |
|
||||||
$("#upok").show(); |
|
||||||
$.post("./functions/sm.php",{data:res.data},function(data,status){ |
|
||||||
|
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
//上传到sm.ms end
|
|
||||||
}); |
|
||||||
|
|
||||||
//复制链接
|
|
||||||
function copy(info){ |
|
||||||
var copy = new clipBoard(document.getElementById('piclink'), { |
|
||||||
beforeCopy: function() { |
|
||||||
info = $("#" + info).val(); |
|
||||||
}, |
|
||||||
copy: function() { |
|
||||||
return info; |
|
||||||
}, |
|
||||||
afterCopy: function() { |
|
||||||
|
|
||||||
} |
|
||||||
}); |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
|
|
||||||
layer.msg('复制成功!', {time: 2000}) |
|
||||||
}); |
|
||||||
} |
|
||||||
//后台复制URL
|
|
||||||
function copyurl(url){ |
|
||||||
var copy = new clipBoard(document.getElementById('adminpic'), { |
|
||||||
beforeCopy: function() { |
|
||||||
|
|
||||||
}, |
|
||||||
copy: function() { |
|
||||||
return url; |
|
||||||
}, |
|
||||||
afterCopy: function() { |
|
||||||
|
|
||||||
} |
|
||||||
}); |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
|
|
||||||
layer.msg('链接已复制!', {time: 2000}) |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//复制链接
|
|
||||||
function newcopy(info){ |
|
||||||
var copy = new clipBoard(document.getElementById('url'), { |
|
||||||
beforeCopy: function() { |
|
||||||
info = $("#" + info).val(); |
|
||||||
}, |
|
||||||
copy: function() { |
|
||||||
return info; |
|
||||||
}, |
|
||||||
afterCopy: function() { |
|
||||||
|
|
||||||
} |
|
||||||
}); |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
|
|
||||||
layer.msg('复制成功!', {time: 2000}) |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//用户登录方法
|
|
||||||
function login(){ |
|
||||||
// 获取用户提交的信息
|
|
||||||
var user = $("#user").val(); |
|
||||||
var password = $("#password").val(); |
|
||||||
|
|
||||||
if((user == '') || (password == '')){ |
|
||||||
layer.msg('用户名或密码不能为空!'); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
$.post("../functions/Controller.php?type=login",{user:user,password:password},function(data,status){ |
|
||||||
layer.msg(data,{time:2000}); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//用户前台预览图片
|
|
||||||
function userpreview(imgurl,id){ |
|
||||||
var showimg = "<center><img style = 'max-width:100%;max-height:100%;' src = '" + imgurl + "' /></center>"; |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
layer.open({ |
|
||||||
type: 1, |
|
||||||
title:"图片预览", |
|
||||||
area: ['80%', '80%'], |
|
||||||
content: showimg |
|
||||||
}); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//后台管理员查看图片
|
|
||||||
function adminshow(imgurl,id){ |
|
||||||
$("#adminshow").show(); |
|
||||||
$("#url").val(imgurl); |
|
||||||
$("#html").val("<img src = '" + imgurl + "' />"); |
|
||||||
$("#markdown").val("![](" + imgurl + ")"); |
|
||||||
$("#bbcode").val("[img]" + imgurl + "[/img]"); |
|
||||||
|
|
||||||
$("#copy").show(); |
|
||||||
$("#adminshow img").attr("src",imgurl); |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
layer.open({ |
|
||||||
type: 1, |
|
||||||
title:false, |
|
||||||
area: '720px', |
|
||||||
content: $("#adminshow"), |
|
||||||
btn: ['删除'], |
|
||||||
cancel: function(index, layero){ |
|
||||||
$("#adminshow img").attr("src",""); |
|
||||||
$("#copy").hide(); |
|
||||||
}, |
|
||||||
yes: function(index, layero){ |
|
||||||
layer.confirm('确认删除?', {icon: 3, title:'温馨提示!'}, function(index){ |
|
||||||
$.get("./delete.php?id="+id,function(data,status){ |
|
||||||
if(data == 'ok') { |
|
||||||
|
|
||||||
$("#imgid"+id).remove(); |
|
||||||
$("#adminshow img").attr("src",""); |
|
||||||
$("#copy").hide(); |
|
||||||
} |
|
||||||
else{ |
|
||||||
alert(data); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
layer.closeAll(); |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//后台管理员查看SM.MS图片
|
|
||||||
function smshow(imgurl,id){ |
|
||||||
var showimg = "<center><img style = 'max-width:100%;max-height:100%;' src = '" + imgurl + "' /></center>"; |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
layer.open({ |
|
||||||
type: 1, |
|
||||||
title:"图片预览", |
|
||||||
area: ['80%', '80%'], |
|
||||||
content: showimg, |
|
||||||
btn: ['压缩', '删除'], |
|
||||||
yes: function(index, layero){ |
|
||||||
layer.msg('SM.MS图片不支持压缩!', {time: 2000}) |
|
||||||
} |
|
||||||
//删除按钮
|
|
||||||
,btn2: function(index, layero){ |
|
||||||
layer.confirm('确认删除?', {icon: 3, title:'温馨提示!'}, function(index){ |
|
||||||
$.get("./delete.php?type=sm&id="+id,function(data,status){ |
|
||||||
if(data == 'ok') { |
|
||||||
$("#imgid"+id).remove(); |
|
||||||
} |
|
||||||
else{ |
|
||||||
alert(data); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
layer.close(index); |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//删除某张图片
|
|
||||||
function deleteimg(id){ |
|
||||||
layer.confirm('确认删除?', {icon: 3, title:'温馨提示!'}, function(index){ |
|
||||||
$.get("./delete.php?id="+id,function(data,status){ |
|
||||||
if(data == 'ok') { |
|
||||||
$("#imgid"+id).remove(); |
|
||||||
console.log("#imgid"+id); |
|
||||||
} |
|
||||||
else{ |
|
||||||
alert(data); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
layer.close(index); |
|
||||||
}); |
|
||||||
} |
|
||||||
//删除SM.MS图片
|
|
||||||
function deletesm(id){ |
|
||||||
layer.confirm('确认删除?', {icon: 3, title:'温馨提示!'}, function(index){ |
|
||||||
$.get("./delete.php?type=sm&id="+id,function(data,status){ |
|
||||||
if(data == 'ok') { |
|
||||||
$("#imgid"+id).remove(); |
|
||||||
} |
|
||||||
else{ |
|
||||||
alert(data); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
layer.close(index); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//取消图片可疑状态
|
|
||||||
function cdubious(id){ |
|
||||||
layer.confirm('确认取消图片可疑状态?', {icon: 3, title:'温馨提示!'}, function(index){ |
|
||||||
$.get("./operation.php?type=cdubious&id="+id,function(data,status){ |
|
||||||
if(data == 'ok') { |
|
||||||
$("#imgid"+id).remove(); |
|
||||||
} |
|
||||||
else{ |
|
||||||
alert(data); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
layer.close(index); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//图片压缩功能
|
|
||||||
function compress(id){ |
|
||||||
//layer.msg('该功能还在开发中!', {time: 2000})
|
|
||||||
layer.open({ |
|
||||||
type:3 |
|
||||||
,content: '处理中...' |
|
||||||
}); |
|
||||||
$.get("../functions/class/class.pic.php?id=" + id,function(data,status){ |
|
||||||
if(status == 'success'){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
} |
|
||||||
layer.open({ |
|
||||||
title: '温馨提示:', |
|
||||||
time:2000 |
|
||||||
,content: data |
|
||||||
}); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//IP查询
|
|
||||||
function ipquery(ip){ |
|
||||||
$.get("https://api.ttt.sh/ip/qqwry/" + ip,function(data,status){ |
|
||||||
if(status == 'success') { |
|
||||||
var info = JSON.parse(data); |
|
||||||
layer.open({ |
|
||||||
title: 'IP查询结果:' |
|
||||||
,content: info.address |
|
||||||
,time:3000 |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//关于
|
|
||||||
function about(){ |
|
||||||
url = window.location.protocol + '//'; |
|
||||||
url = url + window.location.host + '/'; |
|
||||||
layer.open({ |
|
||||||
title: '关于', |
|
||||||
type: 2, |
|
||||||
area: ['240px', '100px'], |
|
||||||
content: "./about.php" |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//删除本页所有照片
|
|
||||||
function delall(){ |
|
||||||
layer.confirm('确认删除本页所有图片?', {icon: 3, title:'提示'}, function(index){ |
|
||||||
//do something
|
|
||||||
|
|
||||||
layer.close(index); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//预览图片
|
|
||||||
function previewimg(id,url){ |
|
||||||
var imgid = "img" + id; |
|
||||||
var upid = id - 1; |
|
||||||
|
|
||||||
var dnid = id + 1; |
|
||||||
|
|
||||||
$("#show" + upid).hide(); |
|
||||||
$("#show" + dnid).hide(); |
|
||||||
|
|
||||||
$("#img" + id).attr('src',url); |
|
||||||
$("#show" + id).show(); |
|
||||||
|
|
||||||
} |
|
||||||
//隐藏图片
|
|
||||||
function hideimg(id){ |
|
||||||
var upid = id - 1; |
|
||||||
|
|
||||||
var dnid = id + 1; |
|
||||||
$("#show" + id).hide(); |
|
||||||
$("#show" + upid).hide(); |
|
||||||
$("#show" + dnid).hide(); |
|
||||||
} |
|
||||||
|
|
||||||
//Ctrl + V上传图片
|
|
||||||
//$(document).keyup(function(){
|
|
||||||
// if(event.keyCode == 86){
|
|
||||||
|
|
||||||
// }
|
|
||||||
//});
|
|
||||||
|
|
||||||
//预览图片
|
|
||||||
function viewimg(id,imgurl){ |
|
||||||
id = "viewimg" + id; |
|
||||||
$("#" + id + " img").attr('src',imgurl); |
|
||||||
//显示图片
|
|
||||||
$("#" + id).show(); |
|
||||||
|
|
||||||
} |
|
||||||
//隐藏图片
|
|
||||||
function hideimg(id){ |
|
||||||
id = "viewimg" + id; |
|
||||||
$("#" + id).hide(); |
|
||||||
} |
|
||||||
|
|
||||||
//URL上传
|
|
||||||
function urlup(){ |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
layer.open({ |
|
||||||
type:3 |
|
||||||
,content: '上传中,请等待...' |
|
||||||
}); |
|
||||||
}); |
|
||||||
arr = $("#arrurl").val(); |
|
||||||
//如果地址为空
|
|
||||||
if(arr == ''){ |
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg('地址不能为空!'); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
$.post("../functions/urlup.php",{arr:arr},function(data,status){ |
|
||||||
var re = eval('(' + data + ')'); |
|
||||||
if(re.code == 1){ |
|
||||||
//关闭加载层
|
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg(re.msg); |
|
||||||
} |
|
||||||
else if(re.code == 0){ |
|
||||||
//关闭加载层
|
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg(re.msg); |
|
||||||
} |
|
||||||
else{ |
|
||||||
layer.closeAll('loading'); |
|
||||||
layer.msg(re.msg); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
//时间筛选
|
|
||||||
function screen(page){ |
|
||||||
var starttime = $("#starttime").val(); |
|
||||||
var endtime = $("#endtime").val(); |
|
||||||
|
|
||||||
if((starttime == '') || (endtime == '')){ |
|
||||||
layui.use('layer', function(){ |
|
||||||
var layer = layui.layer; |
|
||||||
layer.msg('请选择时间!'); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
else{ |
|
||||||
window.location.href = page + "?page=1&date=" + starttime + '|' + endtime; |
|
||||||
} |
|
||||||
} |
|
||||||
//显示图片操作按钮
|
|
||||||
function show_imgcon(id){ |
|
||||||
$("#imgcon" + id).show(); |
|
||||||
} |
|
||||||
//隐藏图片操作按钮
|
|
||||||
function hide_imgcon(id){ |
|
||||||
$("#imgcon" + id).hide(); |
|
||||||
} |
|
||||||
//新版删除图片
|
|
||||||
// function deleteimg(id){
|
|
||||||
// layer.confirm('确认删除?', {icon: 3, title:'温馨提示!'}, function(index){
|
|
||||||
// $.get("./delete.php?id="+id,function(data,status){
|
|
||||||
// if(data == 'ok') {
|
|
||||||
// $("#imgid"+id).remove();
|
|
||||||
// }
|
|
||||||
// else{
|
|
||||||
// alert(data);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
// layer.close(index);
|
|
||||||
// });
|
|
||||||
// }
|
|
@ -1,93 +0,0 @@ |
|||||||
// ==UserScript==
|
|
||||||
// @name ImgURL上传脚本
|
|
||||||
// @namespace https://imgurl.org/
|
|
||||||
// @version 0.21
|
|
||||||
// @description ImgURL快捷上传工具
|
|
||||||
// @author xiaoz.me
|
|
||||||
// @match http://*/*
|
|
||||||
// @match https://*/*
|
|
||||||
// @license GPL
|
|
||||||
// @grant none
|
|
||||||
// ==/UserScript==
|
|
||||||
|
|
||||||
(function() { |
|
||||||
'use strict'; |
|
||||||
|
|
||||||
//定义一个全局弹出层
|
|
||||||
window.layerstart = '<div id = "layer" style = "box-shadow: 1px 1px 2px #888888;border-radius:5px;top:0em;left:0;width:80%;height:720px;background-color:#FFFFFF;position:fixed;z-index:999;display:none;border:1px solid #d2d2d2">'; |
|
||||||
layerstart += '<div style="text-align:right;padding:0.8em;border-bottom:1px solid #d2d2d2;"><a href="javascript:;" onclick="closelayer()" style="color:#FFFFFF;background-color:#FF5722;width:80px;text-align:center;padding:0.5em;border-radius:2px;padding-left:1em;padding-right:1em;">关闭</a></div>'; |
|
||||||
window.layerend = '</div>'; |
|
||||||
|
|
||||||
//让层居中显示
|
|
||||||
window.layerCenter = function(){ |
|
||||||
var bwidth = window.screen.availWidth; |
|
||||||
var bheight = window.screen.availHeight; |
|
||||||
var layertop = (bheight - 720) / 2; |
|
||||||
var layerleft = (bwidth - 1280) / 2; |
|
||||||
|
|
||||||
if(layertop <= 70){ |
|
||||||
layertop = "1em"; |
|
||||||
} |
|
||||||
else{ |
|
||||||
layertop = layertop + "px"; |
|
||||||
} |
|
||||||
|
|
||||||
//改变css
|
|
||||||
//$("#layer").css({"top":layertop,"left":layerleft});
|
|
||||||
//原生js改变css
|
|
||||||
//alert(layertop);
|
|
||||||
document.getElementById("layer").style.top = layertop; |
|
||||||
document.getElementById("layer").style.left = "10%"; |
|
||||||
} |
|
||||||
//创建一个遮罩层
|
|
||||||
window.keepout = function(){ |
|
||||||
var fade = '<div id = "fade" style = "width:100%;height:100%;background:rgba(0, 0, 0, 0.5);position: fixed;left: 0;top: 0;z-index: 99;" onclick = "closelayer()"></div>'; |
|
||||||
//$("body").append(fade);
|
|
||||||
var div = document.createElement("div"); |
|
||||||
div.innerHTML = fade; |
|
||||||
document.body.appendChild(div); |
|
||||||
} |
|
||||||
|
|
||||||
//关闭层
|
|
||||||
window.closelayer = function(){ |
|
||||||
//$("#layer").hide();
|
|
||||||
document.getElementById("layer").style.display = "none"; |
|
||||||
//showSidebar();
|
|
||||||
//$("#layer").remove();
|
|
||||||
var layer = document.getElementById("layer"); |
|
||||||
layer.parentNode.removeChild(layer); |
|
||||||
|
|
||||||
//$("#fade").remove();
|
|
||||||
var fade = document.getElementById("fade"); |
|
||||||
fade.parentNode.removeChild(fade); |
|
||||||
} |
|
||||||
|
|
||||||
//创建一个显示按钮
|
|
||||||
function imgurl(){ |
|
||||||
//$("body").append('<div id = "imgbtn" style = "position:fixed;right:1em;bottom:1em;z-index:88;cursor:pointer;" onclick = "showImgurl()"><img src = "https://libs.xiaoz.top/material/image.png" width = "36px" height = "36px" /></div>');
|
|
||||||
//使用原生js添加按钮
|
|
||||||
var div = document.createElement("div"); |
|
||||||
div.innerHTML = '<div id = "imgbtn" style = "position:fixed;right:1em;bottom:1em;z-index:88;cursor:pointer;" onclick = "showImgurl()"><img src = "https://libs.xiaoz.top/material/image.png" width = "36px" height = "36px" /></div>'; |
|
||||||
document.body.appendChild(div); |
|
||||||
} |
|
||||||
//显示上传按钮
|
|
||||||
window.showImgurl = function(){ |
|
||||||
var up = layerstart; |
|
||||||
up += '<iframe src = "https://imgurl.org/miniup.html" width="100%" height="660px" frameborder="0"></iframe>'; |
|
||||||
up += layerend; |
|
||||||
//$("body").append(up);
|
|
||||||
var div = document.createElement("div"); |
|
||||||
div.innerHTML = up; |
|
||||||
document.body.appendChild(div); |
|
||||||
|
|
||||||
//$("#layer").show();
|
|
||||||
document.getElementById("layer").style.display = "block"; |
|
||||||
|
|
||||||
//显示遮罩
|
|
||||||
keepout(); |
|
||||||
//居中显示层
|
|
||||||
layerCenter(); |
|
||||||
} |
|
||||||
|
|
||||||
imgurl(); |
|
||||||
})(); |
|
@ -1,228 +0,0 @@ |
|||||||
/*! |
|
||||||
* |
|
||||||
* @author: diandian & alanzhang |
|
||||||
* @date: 2016/8/19 |
|
||||||
* @overview: [截屏后,按粘贴快捷键ctrl+v上传,] |
|
||||||
* @兼容性说明: IE11,Firefox,chrome |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
'use strict'; |
|
||||||
|
|
||||||
(function(root, factory){ |
|
||||||
if (typeof define === 'function' && define.amd) { |
|
||||||
// AMD
|
|
||||||
define([], factory); |
|
||||||
} else if (typeof exports === 'object') { |
|
||||||
// Node, CommonJS-like
|
|
||||||
module.exports = factory(); |
|
||||||
} else { |
|
||||||
// Browser globals (root is window)
|
|
||||||
root.ctrlVUtil = factory(); |
|
||||||
} |
|
||||||
}(this, function(){ |
|
||||||
|
|
||||||
function ctrlVUtil(option){ |
|
||||||
|
|
||||||
// 鼠标在该元素上,使用ctrl+v键时上传
|
|
||||||
this.targetElement = null; |
|
||||||
|
|
||||||
// 用于响应paste事件的元素,如果页面不传递,则创建该元素,并位于targetElement前面
|
|
||||||
this.uploadInput = null; |
|
||||||
|
|
||||||
// 默认的上传地址
|
|
||||||
this.uploadUrl = "http://www.oa.com/screenshot/create-file"; |
|
||||||
|
|
||||||
// 对于读取的图片base64,前缀为data:image/jpg;base64,base64content
|
|
||||||
// isCompleteImg为false则去掉前缀直接上传内容部分,为true则上传完整的base64字符串
|
|
||||||
this.isCompleteImg = false; |
|
||||||
|
|
||||||
var that = this; |
|
||||||
|
|
||||||
// 合并参数
|
|
||||||
that.mixinConfig(option); |
|
||||||
|
|
||||||
// 鼠标移入和点击时上传,移出时失焦
|
|
||||||
that.targetElement.addEventListener("mouseover", function() { |
|
||||||
that.uploadInput.focus(); |
|
||||||
}); |
|
||||||
|
|
||||||
that.targetElement.addEventListener("click", function() { |
|
||||||
that.uploadInput.focus(); |
|
||||||
}); |
|
||||||
|
|
||||||
// 移除鼠标则input失去交掉
|
|
||||||
that.targetElement.addEventListener("mouseleave", function() { |
|
||||||
that.uploadInput.blur(); |
|
||||||
}); |
|
||||||
|
|
||||||
// 监听paste的事件
|
|
||||||
that.uploadInput.addEventListener('paste', function(e) { |
|
||||||
that.handlePaste(e); |
|
||||||
}); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* [mixinConfig 整合参数] |
|
||||||
* @param {[type]} option [description] |
|
||||||
* @return {[type]} [description] |
|
||||||
*/ |
|
||||||
ctrlVUtil.prototype.mixinConfig = function(option){ |
|
||||||
this.targetElement = option.targetElement || document.querySelector(".js-upload"); |
|
||||||
this.uploadInput = this.createInputTarget(); |
|
||||||
|
|
||||||
this.isCompleteImg = "isCompleteImg" in option ? option.isCompleteImg : this.isCompleteImg; |
|
||||||
|
|
||||||
// 上传地址
|
|
||||||
this.uploadUrl = option.uploadUrl || this.uploadUrl; |
|
||||||
|
|
||||||
// 除了图片内容以外的其他数据
|
|
||||||
this.data = option.data; |
|
||||||
|
|
||||||
// 上传成功时的回调函数
|
|
||||||
this.success = option.success || function(data) { |
|
||||||
console.log(data); |
|
||||||
}; |
|
||||||
|
|
||||||
// 上传失败时的回调函数
|
|
||||||
this.error = option.error || function(error) { |
|
||||||
console.log(error); |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
/** |
|
||||||
* [createInputTarget 创建div元素,用于响应paste事件] |
|
||||||
* @return {Element} [description] |
|
||||||
*/ |
|
||||||
ctrlVUtil.prototype.createInputTarget = function() { |
|
||||||
var imgContinaer = document.createElement("div"); |
|
||||||
|
|
||||||
// 使其不可见
|
|
||||||
imgContinaer.style.cssText = "border:none;margin:0;padding:0;font-size: 0;height:1px;width:1px;opacity:0;position:fixed;z-index:-1;"; |
|
||||||
|
|
||||||
// 让其可编辑,能响应paste事件
|
|
||||||
imgContinaer.contentEditable = true; |
|
||||||
imgContinaer.class = "ui-ctrlv-uploadInput"; |
|
||||||
|
|
||||||
// 插入targeElementn前面
|
|
||||||
this.targetElement.parentNode.insertBefore(imgContinaer, this.targetElement); |
|
||||||
|
|
||||||
return imgContinaer; |
|
||||||
}; |
|
||||||
|
|
||||||
/** |
|
||||||
* [handlePaste 处理粘贴行为] |
|
||||||
* @param {Event} e [粘贴事件] |
|
||||||
* @return {[type]} [description] |
|
||||||
*/ |
|
||||||
ctrlVUtil.prototype.handlePaste = function(e){ |
|
||||||
|
|
||||||
var that = this; |
|
||||||
|
|
||||||
// webkit 内核支持items方法
|
|
||||||
if (e && e.clipboardData && e.clipboardData.items) { |
|
||||||
|
|
||||||
// 获取item
|
|
||||||
var item = e.clipboardData.items[0], |
|
||||||
that = this; |
|
||||||
|
|
||||||
if (item.type.indexOf('image') != -1) { |
|
||||||
|
|
||||||
var blob = item.getAsFile(); |
|
||||||
|
|
||||||
// 创建读取对象
|
|
||||||
var fileReader = new FileReader(); |
|
||||||
|
|
||||||
// 将文件读取为字符串
|
|
||||||
fileReader.readAsDataURL(blob); |
|
||||||
|
|
||||||
fileReader.addEventListener('load', function(e) { |
|
||||||
var file = e.target.result; |
|
||||||
that.send(file); |
|
||||||
}, false); |
|
||||||
|
|
||||||
} else { |
|
||||||
//that.alertMsg("请粘贴image类型");
|
|
||||||
layer.msg('请粘贴image类型!'); |
|
||||||
} |
|
||||||
|
|
||||||
// firefox无法使用items方法,在粘贴时,图片会作为img标签插入targetElement中,
|
|
||||||
// 获取img标签的src内容进行上传
|
|
||||||
} else { |
|
||||||
|
|
||||||
setTimeout(function() { |
|
||||||
var $img = that.uploadInput.querySelector("img"); |
|
||||||
|
|
||||||
if ($img) { |
|
||||||
that.send($img.src); |
|
||||||
} else { |
|
||||||
//that.alertMsg("浏览器不支持剪贴板操作");
|
|
||||||
layer.msg('当前浏览器不支持剪贴板操作!'); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
}, 200); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
}; |
|
||||||
|
|
||||||
/** |
|
||||||
* [send 上传图片] |
|
||||||
* @param {string} imgcontent [图片内容base64格式] |
|
||||||
* @return {[type]} [description] |
|
||||||
*/ |
|
||||||
ctrlVUtil.prototype.send = function(imgcontent) { |
|
||||||
//自己添加的,显示上传加载
|
|
||||||
layer.load(); |
|
||||||
|
|
||||||
var that = this; |
|
||||||
|
|
||||||
that.uploadInput.innerHTML = ""; |
|
||||||
|
|
||||||
var data = that.data || {}; |
|
||||||
|
|
||||||
// 根据sCompleteImg来决定上传的是整体的base64字符串还是仅仅为内容部分
|
|
||||||
data.content = this.isCompleteImg ? imgcontent : imgcontent.split(';')[1].split(',')[1]; |
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest(); |
|
||||||
|
|
||||||
xhr.open("post",that.uploadUrl,true); |
|
||||||
|
|
||||||
xhr.onreadystatechange = function(e) { |
|
||||||
if (xhr.readyState == 4) { |
|
||||||
if (xhr.status == 200) { |
|
||||||
var ret = JSON.parse(xhr.responseText); |
|
||||||
that.success && that.success(ret); |
|
||||||
} else { |
|
||||||
that.error && that.error(e, xhr); |
|
||||||
} |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
xhr.onerror = function(e) { |
|
||||||
that.error && that.error(e, xhr); |
|
||||||
}; |
|
||||||
|
|
||||||
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); |
|
||||||
|
|
||||||
var dataString = []; |
|
||||||
|
|
||||||
for(var key in data){ |
|
||||||
dataString.push(key+"="+encodeURIComponent(data[key])); |
|
||||||
} |
|
||||||
|
|
||||||
xhr.send(dataString.join("&")); |
|
||||||
}; |
|
||||||
|
|
||||||
ctrlVUtil.prototype.alertMsg = function(content){ |
|
||||||
alert(content); |
|
||||||
} |
|
||||||
|
|
||||||
// 暴露构造函数
|
|
||||||
return ctrlVUtil; |
|
||||||
})); |
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,2 +0,0 @@ |
|||||||
/** layui-v2.2.6 MIT License By https://www.layui.com */ |
|
||||||
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} |
|
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 701 B |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 269 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.0 KiB |