140 lines
5.2 KiB
PHP
140 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\DAO;
|
|
|
|
use Qiniu\Storage\UploadManager;
|
|
use Qiniu\Auth;
|
|
use App\Setting;
|
|
|
|
class UploaderDAO
|
|
{
|
|
|
|
private static $stateMap = [ //上传状态映射表,国际化用户需考虑此处数据的国际化
|
|
"SUCCESS", //上传成功标记,在UEditor中内不可改变,否则flash判断会出错
|
|
"文件大小超出 upload_max_filesize 限制",
|
|
"文件大小超出 MAX_FILE_SIZE 限制",
|
|
"文件未被完整上传",
|
|
"没有文件被上传",
|
|
"上传文件为空",
|
|
"ERROR_TMP_FILE" => "临时文件错误",
|
|
"ERROR_TMP_FILE_NOT_FOUND" => "找不到临时文件",
|
|
"ERROR_SIZE_EXCEED" => "文件大小超出网站限制",
|
|
"ERROR_TYPE_NOT_ALLOWED" => "文件类型不允许",
|
|
"ERROR_CREATE_DIR" => "目录创建失败",
|
|
"ERROR_DIR_NOT_WRITEABLE" => "目录没有写权限",
|
|
"ERROR_FILE_MOVE" => "文件保存时出错",
|
|
"ERROR_FILE_NOT_FOUND" => "找不到上传文件",
|
|
"ERROR_WRITE_CONTENT" => "写入文件内容错误",
|
|
"ERROR_UNKNOWN" => "未知错误",
|
|
"ERROR_DEAD_LINK" => "链接不可用",
|
|
"ERROR_HTTP_LINK" => "链接不是http链接",
|
|
"ERROR_HTTP_CONTENTTYPE" => "链接contentType不正确",
|
|
"INVALID_URL" => "非法 URL",
|
|
"INVALID_IP" => "非法 IP"
|
|
];
|
|
|
|
/**
|
|
* 上传错误检查
|
|
* @param string $errCode
|
|
* @return string
|
|
*/
|
|
public static function getStateInfo($errCode)
|
|
{
|
|
return !self::$stateMap[$errCode] ? self::$stateMap["ERROR_UNKNOWN"] : self::$stateMap[$errCode];
|
|
}
|
|
|
|
/**
|
|
* 文件上传
|
|
*
|
|
* @param \Illuminate\Http\UploadedFile $file
|
|
* @return array
|
|
*/
|
|
public static function fileUpload($file, $scene = '')
|
|
{
|
|
//读取上传参数
|
|
$upload_file_size = intval(Setting::getValueByKey('upload_file_size', 0));
|
|
$upload_file_ext_list = Setting::getValueByKey('upload_file_ext_list');
|
|
$upload_file_ext_list == '' && $upload_file_ext_list = 'png,jpg,jpeg,gif,bmp';
|
|
//文件大小判断
|
|
$upload_file_size *= 1048576; //文件上传最大
|
|
$filesize = $file->getSize();
|
|
$filename = $file->getFilename();
|
|
$origin = $file->getClientOriginalName();
|
|
$ext = $file->guessExtension();
|
|
empty($scene) || $scene .= '/';
|
|
|
|
//文件扩展名判断
|
|
$upload_file_ext_list = explode(',', strtolower(str_replace(' ', '', $upload_file_ext_list)));
|
|
|
|
if (!in_array($ext, $upload_file_ext_list)) {
|
|
return [
|
|
'state' => self::getStateInfo('ERROR_TYPE_NOT_ALLOWED'),
|
|
'url' => '',
|
|
'title' => $filename,
|
|
'original' => $origin,
|
|
'type' => '.' . $ext,
|
|
'size' => $filesize,
|
|
];
|
|
}
|
|
//文件大小校验
|
|
if ($upload_file_size > 0 && $filesize > $upload_file_size) {
|
|
return [
|
|
'state' => self::getStateInfo('ERROR_SIZE_EXCEED'),
|
|
'url' => '',
|
|
'title' => $filename,
|
|
'original' => $origin,
|
|
'type' => '.' . $ext,
|
|
'size' => $filesize,
|
|
];
|
|
}
|
|
//读取存储参数
|
|
$use_qiniu_storage = Setting::getValueByKey('use_qiniu_storage', 0);
|
|
$qiniu_url = Setting::getValueByKey('qiniu_url', '');
|
|
$access_key = Setting::getValueByKey('qiniu_access_key', '');
|
|
$secret_key = Setting::getValueByKey('qiniu_secret_key', '');
|
|
$bucket_name = Setting::getValueByKey('qiniu_bucket_name', '');
|
|
|
|
$url = $use_qiniu_storage ? $qiniu_url : url('');
|
|
|
|
if ($use_qiniu_storage) {
|
|
$file_obj = new \SplFileObject($file->getPathname());
|
|
$file_content = $file_obj->fread($file->getSize());
|
|
$upManager = new UploadManager();
|
|
$auth = new Auth($access_key, $secret_key);
|
|
$token = $auth->uploadToken($bucket_name);
|
|
list($ret, $error) = $upManager->put($token, $filename, $file_content);
|
|
if ($error) {
|
|
return [
|
|
'state' => is_string($error) ? $error : $error->message(),
|
|
'url' => '',
|
|
'title' => $filename,
|
|
'original' => $origin,
|
|
'type' => '.' . $ext,
|
|
'size' => $filesize,
|
|
];
|
|
}
|
|
$file_url = $url . '/' . $ret['key'];
|
|
} else {
|
|
$path = '/upload/' . $scene . date('Ymd') . '/';
|
|
$full_path = public_path() . $path;
|
|
file_exists($path) || @mkdir($full_path, 0777, true);
|
|
$file->move($full_path);
|
|
|
|
if($scene =='admin/'){
|
|
$file_url =$path . $filename;
|
|
}else{
|
|
$file_url = $url . $path . $filename;
|
|
}
|
|
|
|
}
|
|
return [
|
|
'state' => self::getStateInfo(0),
|
|
'url' => $file_url,
|
|
'title' => $filename,
|
|
'original' => $origin,
|
|
'type' => '.' . $ext,
|
|
'size' => $filesize,
|
|
];
|
|
}
|
|
}
|