作者 Karson

新增上传到本机时文件名规则和大小控制

修复无法编辑管理员的BUG
添加批量上传参数配置
... ... @@ -4,7 +4,9 @@ namespace app\admin\controller;
use app\common\controller\Backend;
use fast\Http;
use fast\Random;
use fast\Tree;
use think\Config;
use think\Db;
use think\Lang;
... ... @@ -181,12 +183,58 @@ class Ajax extends Backend
{
$this->code = -1;
$file = $this->request->file('file');
$uploaddir = '/public/uploads/';
$info = $file->move(ROOT_PATH . $uploaddir);
if ($info)
$upload = Config::get('upload');
preg_match('/(\d+)(\w+)/', $upload['maxsize'], $matches);
$type = strtolower($matches[2]);
$typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3];
$size = (int) $upload['maxsize'] * pow(1024, isset($typeDict[$type]) ? $typeDict[$type] : 0);
$fileInfo = $file->getInfo();
$suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
$suffix = $suffix ? $suffix : 'file';
$replaceArr = [
'{year}' => date("Y"),
'{mon}' => date("m"),
'{day}' => date("d"),
'{hour}' => date("H"),
'{min}' => date("i"),
'{sec}' => date("s"),
'{random}' => Random::alnum(16),
'{random32}' => Random::alnum(32),
'{filename}' => $suffix ? substr($fileInfo['name'], 0, strripos($fileInfo['name'], '.')) : $fileInfo['name'],
'{suffix}' => $suffix,
'{.suffix}' => $suffix ? '.' . $suffix : '',
'{filemd5}' => md5_file($fileInfo['tmp_name']),
];
$savekey = $upload['savekey'];
$savekey = str_replace(array_keys($replaceArr), array_values($replaceArr), $savekey);
$uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1);
$fileName = substr($savekey, strripos($savekey, '/') + 1);
//
$splInfo = $file->validate(['size' => $size])->move(ROOT_PATH . '/public' . $uploadDir, $fileName);
if ($splInfo)
{
$imagewidth = $imageheight = 0;
if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf']))
{
$imgInfo = getimagesize($splInfo->getPathname());
$imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;
$imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
}
$params = array(
'filesize' => $fileInfo['size'],
'imagewidth' => $imagewidth,
'imageheight' => $imageheight,
'imagetype' => $suffix,
'imageframes' => 0,
'mimetype' => $fileInfo['type'],
'url' => $uploadDir . $splInfo->getSaveName(),
'uploadtime' => time()
);
model("attachment")->create(array_filter($params));
$this->code = 200;
$this->data = $uploaddir . $info->getSaveName();
$this->data = $uploadDir . $splInfo->getSaveName();
}
else
{
... ...
... ... @@ -96,7 +96,7 @@ class Admin extends Backend
{
if ($params['password'])
{
$params['salt'] = Random::basic(4);
$params['salt'] = Random::alnum();
$params['password'] = md5(md5($params['password']) . $params['salt']);
}
$row->save($params);
... ...
... ... @@ -32,6 +32,7 @@ class Configvalue extends Model
$uploadcfg = $uploadcfg ? $uploadcfg : [];
$uploadcfg = array_merge($uploadcfg, $params);
$uploadcfg['bucket'] = isset($uploadcfg['bucket']) ? $uploadcfg['bucket'] : '';
$multiple = isset($uploadcfg['multiple']) ? $uploadcfg['multiple'] : false;
$savekey = isset($uploadcfg['savekey']) ? $uploadcfg['savekey'] : '';
$uploadcfg['save-key'] = isset($uploadcfg['save-key']) ? $uploadcfg['save-key'] : $savekey;
$expiration = time() + (isset($uploadcfg['expire']) ? $uploadcfg['expire'] : 600);
... ... @@ -68,6 +69,7 @@ class Configvalue extends Model
'maxsize' => isset($uploadcfg['maxsize']) ? $uploadcfg['maxsize'] : '',
'mimetype' => isset($uploadcfg['mimetype']) ? $uploadcfg['mimetype'] : '',
'multipart' => $multipart,
'multiple' => $multiple,
];
}
... ...
... ... @@ -15,6 +15,7 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
var maxsize = $(this).data("maxsize");
var mimetype = $(this).data("mimetype");
var multipart = $(this).data("multipart");
var multiple = $(this).data("multiple");
//上传URL
url = url ? url : Config.upload.uploadurl;
//最大可上传
... ... @@ -23,10 +24,13 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
mimetype = mimetype ? mimetype : Config.upload.mimetype;
//请求的表单参数
multipart = multipart ? multipart : Config.upload.multipart;
//是否支持批量上传
multiple = multiple ? multiple : Config.upload.multiple;
//生成Plupload实例
Upload.list[id] = new Plupload.Uploader({
runtimes: 'html5,flash,silverlight,html4',
multi_selection: false, //是否允许多选批量上传
browse_button: id, // you can pass an id...
multi_selection: multiple, //是否允许多选批量上传
browse_button: id, // 浏览按钮的ID
container: $(this).parent().get(0), //取按钮的上级元素
flash_swf_url: '/assets/libs/plupload/js/Moxie.swf',
silverlight_xap_url: '/assets/libs/plupload/js/Moxie.xap',
... ... @@ -63,19 +67,19 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>');
//这里建议不修改
try {
var data = JSON.parse(info.response);
if (data.hasOwnProperty('code')) {
data.code = data.code == 200 ? 0 : data.code;
if (data.hasOwnProperty("url")) {
data.content = data.url;
var response = JSON.parse(info.response);
if (response.hasOwnProperty('code')) {
response.code = response.code == 200 ? 1 : response.code;
if (response.hasOwnProperty("url")) {
response.data = response.url;
}
$("input[data-plupload-id='" + id + "-text']").val(data.content);
$("input[data-plupload-id='" + id + "-text']").val(response.data);
var afterUpload = $("#" + id).data("after-upload");
if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
Upload.api.custom[afterUpload].call(info, id, data);
Upload.api.custom[afterUpload].call(info, id, response);
}
if (typeof onAfterUpload == 'function') {
onAfterUpload.call(info, id, data);
onAfterUpload.call(info, id, response);
}
} else {
Toastr.error(e.message + "(code:-2)");
... ...