|
|
@@ -1,5 +1,7 @@
|
|
|
<?php
|
|
|
+
|
|
|
namespace app\weixin\model;
|
|
|
+
|
|
|
use cmf\lib\Upload;
|
|
|
use think\Model;
|
|
|
use think\Request;
|
|
|
@@ -13,30 +15,31 @@ class Stroage extends Model
|
|
|
* @param $scene 应用场景
|
|
|
* @return array|string
|
|
|
*/
|
|
|
- public static function uploadImg($file, $scene='default'){
|
|
|
+ public static function uploadImg($file, $scene = 'default')
|
|
|
+ {
|
|
|
$data = [];
|
|
|
$path = "upload/{$scene}";
|
|
|
- if(!is_dir($path)){
|
|
|
+ if (!is_dir($path)) {
|
|
|
mkdir($path, 0755, true);
|
|
|
}
|
|
|
$fileSize = config('files.imageSize');
|
|
|
- $fileSize = $fileSize? $fileSize*1024*1024 : 10*1024*1024;
|
|
|
- $info = $file->validate(['size'=>$fileSize,'ext'=>'jpg,jpeg,png,gif'])->move('./'.$path);
|
|
|
- if($info){
|
|
|
- $filename = str_replace('\\','/', $info->getSaveName());
|
|
|
+ $fileSize = $fileSize ? $fileSize * 1024 * 1024 : 10 * 1024 * 1024;
|
|
|
+ $info = $file->validate(['size' => $fileSize, 'ext' => 'jpg,jpeg,png,gif'])->move('./' . $path);
|
|
|
+ if ($info) {
|
|
|
+ $filename = str_replace('\\', '/', $info->getSaveName());
|
|
|
$fileInfo = $info->getInfo();
|
|
|
- $name = isset($fileInfo['name'])? $fileInfo['name'] : '';
|
|
|
+ $name = isset($fileInfo['name']) ? $fileInfo['name'] : '';
|
|
|
$fileType = cmf_get_file_extension($name);
|
|
|
$data = [
|
|
|
- 'name'=> $name,
|
|
|
- 'file'=> "{$scene}/".$filename,
|
|
|
- 'preview'=> cmf_get_image_preview_url("{$scene}/".$filename),
|
|
|
- 'file_type'=> $fileType,
|
|
|
- 'file_size'=> isset($fileInfo['size'])? getFileSize($fileInfo['size']) : 0,
|
|
|
- 'md5_key'=> md5_file(cmf_get_image_preview_url("{$scene}/".$filename)),
|
|
|
- 'total_page'=> 1,
|
|
|
+ 'name' => $name,
|
|
|
+ 'file' => "{$scene}/" . $filename,
|
|
|
+ 'preview' => cmf_get_image_preview_url("{$scene}/" . $filename),
|
|
|
+ 'file_type' => $fileType,
|
|
|
+ 'file_size' => isset($fileInfo['size']) ? getFileSize($fileInfo['size']) : 0,
|
|
|
+ 'md5_key' => md5_file(cmf_get_image_preview_url("{$scene}/" . $filename)),
|
|
|
+ 'total_page' => 1,
|
|
|
];
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
return $info;
|
|
|
}
|
|
|
return $data;
|
|
|
@@ -48,34 +51,35 @@ class Stroage extends Model
|
|
|
* @param string $scene
|
|
|
* @return bool|int|string
|
|
|
*/
|
|
|
- public static function uploadBaseImg($baseList, $scene='default'){
|
|
|
+ public static function uploadBaseImg($baseList, $scene = 'default')
|
|
|
+ {
|
|
|
$data = [];
|
|
|
- $path = "{$scene}/".date('Ymd').'/';
|
|
|
- foreach($baseList as $k => $item){
|
|
|
- if(!is_dir('/public/'.$path)){
|
|
|
- mkdir('/public/'.$path, 755, true);
|
|
|
+ $path = "{$scene}/" . date('Ymd') . '/';
|
|
|
+ foreach ($baseList as $k => $item) {
|
|
|
+ if (!is_dir('/public/' . $path)) {
|
|
|
+ mkdir('/public/' . $path, 755, true);
|
|
|
}
|
|
|
- $filename = $path.'P_'.md5(uniqid().time().$k).'.jpg';
|
|
|
- $src = isset($item['src'])? $item['src'] : '';
|
|
|
- if($src && !preg_match("/default//", $src) && file_put_contents('/public/'.$filename, $src)){
|
|
|
+ $filename = $path . 'P_' . md5(uniqid() . time() . $k) . '.jpg';
|
|
|
+ $src = isset($item['src']) ? $item['src'] : '';
|
|
|
+ if ($src && !preg_match("/default//", $src) && file_put_contents('/public/' . $filename, $src)) {
|
|
|
$data[] = [
|
|
|
- 'name'=> isset($item['name'])? trim($item['name']) : '',
|
|
|
- 'url'=> $filename,
|
|
|
- 'nums'=> isset($item['nums'])? intval($item['nums']) : 1,
|
|
|
- 'total_page'=> 1,
|
|
|
- 'file_size'=> isset($item['file_size'])? intval($item['file_size']) : 0,
|
|
|
- 'file_type'=> isset($item['file_type'])? ltrim($item['file_type'],'image/') : '',
|
|
|
- 'type'=> isset($item['type'])? trim($item['type']) : '',
|
|
|
- 'md5_key'=> md5_file(cmf_get_image_preview_url($filename)),
|
|
|
- 'created_at'=> date('Y-m-d H:i:s')
|
|
|
+ 'name' => isset($item['name']) ? trim($item['name']) : '',
|
|
|
+ 'url' => $filename,
|
|
|
+ 'nums' => isset($item['nums']) ? intval($item['nums']) : 1,
|
|
|
+ 'total_page' => 1,
|
|
|
+ 'file_size' => isset($item['file_size']) ? intval($item['file_size']) : 0,
|
|
|
+ 'file_type' => isset($item['file_type']) ? ltrim($item['file_type'], 'image/') : '',
|
|
|
+ 'type' => isset($item['type']) ? trim($item['type']) : '',
|
|
|
+ 'md5_key' => md5_file(cmf_get_image_preview_url($filename)),
|
|
|
+ 'created_at' => date('Y-m-d H:i:s')
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if($data){
|
|
|
+ if ($data) {
|
|
|
return FileLogs::insertAll($data);
|
|
|
} else {
|
|
|
- return false;
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -85,36 +89,37 @@ class Stroage extends Model
|
|
|
* @param $scene 应用场景
|
|
|
* @return array|string
|
|
|
*/
|
|
|
- public static function uploadFile($file, $scene='default'){
|
|
|
+ public static function uploadFile($file, $scene = 'default')
|
|
|
+ {
|
|
|
$data = [];
|
|
|
$path = "upload/files/{$scene}";
|
|
|
- if(!is_dir($path)){
|
|
|
+ if (!is_dir($path)) {
|
|
|
mkdir($path, 0755, true);
|
|
|
}
|
|
|
$fileTypes = config('files.fileTypes');
|
|
|
$fileSize = config('files.fileSize');
|
|
|
- $fileSize = $fileSize? $fileSize*1024*1024 : 30*1024*1024;
|
|
|
- $fileTypes = $fileTypes? $fileTypes : ['doc','docx','xls','xlsx','ppt','pptx','pdf'];
|
|
|
- $info = $file->validate(['size'=> $fileSize, 'ext'=> implode(',', $fileTypes)])->move('./'.$path);
|
|
|
- if($info){
|
|
|
- $filename = str_replace('\\','/', $info->getSaveName());
|
|
|
+ $fileSize = $fileSize ? $fileSize * 1024 * 1024 : 30 * 1024 * 1024;
|
|
|
+ $fileTypes = $fileTypes ? $fileTypes : ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf'];
|
|
|
+ $info = $file->validate(['size' => $fileSize, 'ext' => implode(',', $fileTypes)])->move('./' . $path);
|
|
|
+ if ($info) {
|
|
|
+ $filename = str_replace('\\', '/', $info->getSaveName());
|
|
|
$fileInfo = $info->getInfo();
|
|
|
- $name = isset($fileInfo['name'])? $fileInfo['name'] : '';
|
|
|
+ $name = isset($fileInfo['name']) ? $fileInfo['name'] : '';
|
|
|
$fileType = cmf_get_file_extension($name);
|
|
|
- $file = "files/{$scene}/".$filename;
|
|
|
- if(Stroage::checkFileExists($file)){
|
|
|
+ $file = "files/{$scene}/" . $filename;
|
|
|
+ if (Stroage::checkFileExists($file)) {
|
|
|
$page = Stroage::getFilePage($file);
|
|
|
- if(in_array($fileType,['xls','xlsx'])){
|
|
|
- $file = str_replace('.'.$fileType,'.pdf', $file);
|
|
|
+ if (in_array($fileType, ['xls', 'xlsx'])) {
|
|
|
+ $file = str_replace('.' . $fileType, '.pdf', $file);
|
|
|
}
|
|
|
$data = [
|
|
|
- 'name'=> $name,
|
|
|
- 'file'=> $file,
|
|
|
- 'preview'=> cmf_get_image_preview_url($file),
|
|
|
- 'file_type'=> $fileType,
|
|
|
- 'file_size'=> isset($fileInfo['size'])? getFileSize($fileInfo['size']) : 0,
|
|
|
- 'md5_key'=> md5_file(cmf_get_image_preview_url($file)),
|
|
|
- 'total_page'=> $page,
|
|
|
+ 'name' => $name,
|
|
|
+ 'file' => $file,
|
|
|
+ 'preview' => cmf_get_image_preview_url($file),
|
|
|
+ 'file_type' => $fileType,
|
|
|
+ 'file_size' => isset($fileInfo['size']) ? getFileSize($fileInfo['size']) : 0,
|
|
|
+ 'md5_key' => md5_file(cmf_get_image_preview_url($file)),
|
|
|
+ 'total_page' => $page,
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
@@ -127,8 +132,9 @@ class Stroage extends Model
|
|
|
* @param $file
|
|
|
* @return bool
|
|
|
*/
|
|
|
- public static function checkFileExists($file){
|
|
|
- $file = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
+ public static function checkFileExists($file)
|
|
|
+ {
|
|
|
+ $file = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
return is_file($file);
|
|
|
}
|
|
|
|
|
|
@@ -138,11 +144,12 @@ class Stroage extends Model
|
|
|
* @param $fileType
|
|
|
* @return mixed
|
|
|
*/
|
|
|
- public static function makeZipFile($file, $fileType){
|
|
|
- $filename = str_replace('.'.$fileType,'.zip', $file);
|
|
|
+ public static function makeZipFile($file, $fileType)
|
|
|
+ {
|
|
|
+ $filename = str_replace('.' . $fileType, '.zip', $file);
|
|
|
$zip = new \ZipArchive();
|
|
|
- $file = UPLOAD_PATH.$file;
|
|
|
- $zip->open(UPLOAD_PATH.$filename,\ZipArchive::CREATE); //打开压缩包
|
|
|
+ $file = UPLOAD_PATH . $file;
|
|
|
+ $zip->open(UPLOAD_PATH . $filename, \ZipArchive::CREATE); //打开压缩包
|
|
|
$zip->addFile($file, basename($file)); //向压缩包中添加文件
|
|
|
$zip->close(); //关闭压缩包
|
|
|
return $filename;
|
|
|
@@ -154,12 +161,13 @@ class Stroage extends Model
|
|
|
* @param $fileType 文件类型
|
|
|
* @return bool|mixed
|
|
|
*/
|
|
|
- public static function moveFileToZip($file, $fileType=''){
|
|
|
+ public static function moveFileToZip($file, $fileType = '')
|
|
|
+ {
|
|
|
$fileType = getFileType($file);
|
|
|
- $file = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
- $filename = str_replace('.'.$fileType,'.zip', $file);
|
|
|
- if(copy($file, $filename)){
|
|
|
- return str_replace('\\','/', $filename);;
|
|
|
+ $file = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
+ $filename = str_replace('.' . $fileType, '.zip', $file);
|
|
|
+ if (copy($file, $filename)) {
|
|
|
+ return str_replace('\\', '/', $filename);;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
@@ -170,16 +178,17 @@ class Stroage extends Model
|
|
|
* @param $file ZIP压缩文件
|
|
|
* @return bool|string
|
|
|
*/
|
|
|
- public static function getZipPageFile($file){
|
|
|
+ public static function getZipPageFile($file)
|
|
|
+ {
|
|
|
$zip = new \ZipArchive();
|
|
|
- $file = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
+ $file = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
// 中文文件名要使用ANSI编码的文件格式
|
|
|
if ($zip->open($file) === TRUE) {
|
|
|
//提取全部文件
|
|
|
- $file = str_replace('.zip','', $file);
|
|
|
+ $file = str_replace('.zip', '', $file);
|
|
|
$zip->extractTo($file); //提取部分文件
|
|
|
$zip->close();
|
|
|
- return str_replace('\\','/', $file.'/docProps/app.xml');
|
|
|
+ return str_replace('\\', '/', $file . '/docProps/app.xml');
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -189,9 +198,10 @@ class Stroage extends Model
|
|
|
* 删除文件
|
|
|
* @param $file
|
|
|
*/
|
|
|
- public static function deleteFile($file){
|
|
|
- $file = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
- if(is_file($file)){
|
|
|
+ public static function deleteFile($file)
|
|
|
+ {
|
|
|
+ $file = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
+ if (is_file($file)) {
|
|
|
unlink($file);
|
|
|
}
|
|
|
}
|
|
|
@@ -200,12 +210,13 @@ class Stroage extends Model
|
|
|
* 删除ZIP压缩包以及其解压文件
|
|
|
* @param $file 压缩奥文件
|
|
|
*/
|
|
|
- public static function deleteZip($file){
|
|
|
- if(is_file($file)){
|
|
|
+ public static function deleteZip($file)
|
|
|
+ {
|
|
|
+ if (is_file($file)) {
|
|
|
Stroage::deleteFile($file);
|
|
|
}
|
|
|
- $zipDir = str_replace('.zip','', $file);
|
|
|
- if(is_dir($zipDir)){
|
|
|
+ $zipDir = str_replace('.zip', '', $file);
|
|
|
+ if (is_dir($zipDir)) {
|
|
|
deleteDir($zipDir);
|
|
|
}
|
|
|
}
|
|
|
@@ -215,50 +226,51 @@ class Stroage extends Model
|
|
|
* @param $file 文件
|
|
|
* @return int
|
|
|
*/
|
|
|
- public static function getFilePage($file){
|
|
|
+ public static function getFilePage($file)
|
|
|
+ {
|
|
|
set_time_limit(0);
|
|
|
$fileType = getFileType($file);
|
|
|
|
|
|
// PDF 类型文件
|
|
|
- if(in_array($fileType, ['pdf'])){
|
|
|
+ if (in_array($fileType, ['pdf'])) {
|
|
|
return Stroage::getPdfFilePage($file);
|
|
|
}
|
|
|
|
|
|
// 表格文件转PDF
|
|
|
- if(in_array($fileType, ['xls','xlsx','doc','docx'])){
|
|
|
+ if (in_array($fileType, ['xls', 'xlsx', 'doc', 'docx'])) {
|
|
|
$file = Stroage::convertFile($file);
|
|
|
return Stroage::getPdfFilePage($file);
|
|
|
}
|
|
|
|
|
|
// 其他文件
|
|
|
$fileTypes = config('files.fileTypes');
|
|
|
- $fileTypes = $fileTypes? $fileTypes : ['doc','docx','ppt','pptx'];
|
|
|
- if(!in_array($fileType, $fileTypes)){
|
|
|
+ $fileTypes = $fileTypes ? $fileTypes : ['doc', 'docx', 'ppt', 'pptx'];
|
|
|
+ if (!in_array($fileType, $fileTypes)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
$zipFile = Stroage::moveFileToZip($file);
|
|
|
- if(!is_file($zipFile)){
|
|
|
+ if (!is_file($zipFile)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
// 获取页数文件内容
|
|
|
$pageFile = Stroage::getZipPageFile($zipFile);
|
|
|
- if(!is_file($pageFile)){
|
|
|
+ if (!is_file($pageFile)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
$content = file_get_contents($pageFile);
|
|
|
- if(empty($content)){
|
|
|
+ if (empty($content)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
preg_match("/(<Pages>([1-9][0-9]*):?<\/Pages>)|(<Slides>([1-9][0-9]*):?<\/Slides>)|(<vt:i4>([1-9][0-9]*):?<\/vt:i4>)/", $content, $result);
|
|
|
- $page = $result? intval(end($result)) : 0;
|
|
|
+ $page = $result ? intval(end($result)) : 0;
|
|
|
|
|
|
// 删除处理生成临时压缩包文件
|
|
|
$deleteTemp = config('print.deleteTemp');
|
|
|
- if($deleteTemp){
|
|
|
+ if ($deleteTemp) {
|
|
|
Stroage::deleteZip($zipFile);
|
|
|
}
|
|
|
|
|
|
@@ -270,17 +282,18 @@ class Stroage extends Model
|
|
|
* @param $file
|
|
|
* @return string
|
|
|
*/
|
|
|
- public static function filtterColor($file){
|
|
|
+ public static function filtterColor($file)
|
|
|
+ {
|
|
|
$filepath = dirname($file);
|
|
|
$newFile = $waterfile = $filepath . '/color_' . basename($file);
|
|
|
- if(!file_exists('upload/'.$file)){
|
|
|
+ if (!file_exists('upload/' . $file)) {
|
|
|
return false;
|
|
|
}
|
|
|
- // echo $newFile;exit;
|
|
|
- @fopen($newFile,'w+');
|
|
|
- $im = imagecreatefromjpeg($file);
|
|
|
+
|
|
|
+ @fopen('upload/' . $newFile, 'w+');
|
|
|
+ $im = imagecreatefromjpeg('upload/' . $file);
|
|
|
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
|
|
|
- imagepng($im, $newFile);
|
|
|
+ imagepng($im, 'upload/' . $newFile);
|
|
|
} else {
|
|
|
$newFile = '';
|
|
|
}
|
|
|
@@ -295,12 +308,13 @@ class Stroage extends Model
|
|
|
* @param string $type 转换类型
|
|
|
* @return mixed
|
|
|
*/
|
|
|
- public static function convertFile($file, $type='pdf'){
|
|
|
+ public static function convertFile($file, $type = 'pdf')
|
|
|
+ {
|
|
|
$fileType = getFileType($file);
|
|
|
- $pathFile = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
- $path = dirname($pathFile).'/';
|
|
|
- $filename = str_replace('.'.$fileType,'.pdf', $file);
|
|
|
- switch($type){
|
|
|
+ $pathFile = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
+ $path = dirname($pathFile) . '/';
|
|
|
+ $filename = str_replace('.' . $fileType, '.pdf', $file);
|
|
|
+ switch ($type) {
|
|
|
case 'pdf':
|
|
|
$command = "libreoffice6.3 --headless --invisible --convert-to pdf:writer_pdf_Export --outdir \"{$path}\" \"{$pathFile}\"";
|
|
|
exec($command);
|
|
|
@@ -316,23 +330,24 @@ class Stroage extends Model
|
|
|
* @param $file 文件
|
|
|
* @return bool|int
|
|
|
*/
|
|
|
- public static function getPdfFilePage($file){
|
|
|
- $file = preg_match("/^files/", $file)? UPLOAD_PATH.$file : $file;
|
|
|
- if(!is_readable($file) || !file_exists($file)){
|
|
|
+ public static function getPdfFilePage($file)
|
|
|
+ {
|
|
|
+ $file = preg_match("/^files/", $file) ? UPLOAD_PATH . $file : $file;
|
|
|
+ if (!is_readable($file) || !file_exists($file)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- $max=0;
|
|
|
- $fp = @fopen($file,"r");
|
|
|
- if(!$fp){
|
|
|
+ $max = 0;
|
|
|
+ $fp = @fopen($file, "r");
|
|
|
+ if (!$fp) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- while(!feof($fp)) {
|
|
|
- $line = fgets($fp,255);
|
|
|
- if (preg_match('/\/Count [0-9]+/', $line, $matches)){
|
|
|
- preg_match('/[0-9]+/',$matches[0], $matches2);
|
|
|
- if ($max<$matches2[0]) $max=$matches2[0];
|
|
|
+ while (!feof($fp)) {
|
|
|
+ $line = fgets($fp, 255);
|
|
|
+ if (preg_match('/\/Count [0-9]+/', $line, $matches)) {
|
|
|
+ preg_match('/[0-9]+/', $matches[0], $matches2);
|
|
|
+ if ($max < $matches2[0]) $max = $matches2[0];
|
|
|
}
|
|
|
}
|
|
|
|