优化文件操作类;支持wangEditor上传;

This commit is contained in:
augushong
2021-09-05 01:03:04 +08:00
parent 4fb4ea0e10
commit 1f935cf0f5

View File

@@ -57,13 +57,28 @@ class UploadFiles
if (empty($type)) { if (empty($type)) {
return json_message('缺少类型参数'); return json_message('缺少类型参数');
} }
$dir_name = $request->param('dir', $type);
$file = request()->file('file'); $file = request()->file('file');
try {
self::fileScan($file);
$model_file = self::saveFile($file, $type, $dir_name);
return json_message($model_file->toArray());
} catch (\Throwable $th) {
return json_message($th->getMessage());
}
}
public static function fileScan($file)
{
$file_extension = $file->extension(); $file_extension = $file->extension();
if ($file_extension == 'php') { if ($file_extension == 'php') {
return json_message('上传文件异常'); throw new \Exception('上传文件异常');
} }
$file_path = $file->getRealPath(); $file_path = $file->getRealPath();
@@ -71,34 +86,58 @@ class UploadFiles
$file_content = file_get_contents($file_path); $file_content = file_get_contents($file_path);
if (strpos($file_content, '<?php') !== false) { if (strpos($file_content, '<?php') !== false) {
return json_message('上传文件异常'); throw new \Exception('上传文件异常');
} }
if (empty($file)) { if (empty($file)) {
return json_message('上传失败'); throw new \Exception('上传失败');
}
} }
public static function wangEditorSave(Request $request)
{
$type = $request->param('type');
if (empty($type)) {
return json_message('缺少类型参数');
}
$dir_name = $request->param('dir', $type); $dir_name = $request->param('dir', $type);
$files = $request->file();
$saved_files_src = [];
foreach ($files as $file) {
try { try {
$model_file = self::saveFile($file, $type, $dir_name);
return json_message($model_file->append(['src'])->toArray()); self::fileScan($file);
$saved_files_src[] = self::saveFile($file, $type, $dir_name)->src;
} catch (\Throwable $th) { } catch (\Throwable $th) {
return json_message($th->getMessage()); return json_message($th->getMessage());
} }
} }
public static function saveFile(File $file, $type, $dir_name = null) return json([
"errno" => 0,
"data" => $saved_files_src
]);
}
public static function saveFile($file, $type, $dir_name = null)
{ {
if (is_null($dir_name)) { if (is_null($dir_name)) {
$dir_name = $type; $dir_name = $type;
} }
$model_file = UploadFiles::add(); $model_file = UploadFiles::add();
if ($file instanceof UploadedFile) { if ($file instanceof UploadedFile) {
$model_file->file_name = $file->getOriginalName(); $model_file->file_name = $file->getOriginalName();
} else { } else {
$model_file->file_name = $file->getFilename(); $model_file->file_name = $file->getFilename();
} }
$model_file->mime_type = $file->getMime(); $model_file->mime_type = $file->getMime();
$model_file->ext_name = $file->extension(); $model_file->ext_name = $file->extension();
$model_file->file_size = $file->getSize(); $model_file->file_size = $file->getSize();
@@ -109,13 +148,28 @@ class UploadFiles
$model_file->save_name = Filesystem::putFile('upload/' . $dir_name, $file, 'uniqid'); $model_file->save_name = Filesystem::putFile('upload/' . $dir_name, $file, 'uniqid');
$model_file->save(); $model_file->save();
$model_file->append(['src']);
return $model_file; return $model_file;
} }
public static function saveUrlFile($url, $type) public static function saveUrlFile($url, $type)
{ {
$file_data = geturl($url); $file_data = geturl($url);
return json_message(self::saveData($file_data, $type)->toArray());
}
public static function saveBase64File($file_data, $type)
{
if (strstr($file_data, ",")) {
$file_data = explode(',', $file_data);
$file_data = $file_data[1];
}
$file_data = base64_decode($file_data);
return json_message(self::saveData($file_data, $type)->toArray());
}
public static function saveData($file_data, $type)
{
$mime_type = MimeType::detectByContent($file_data); $mime_type = MimeType::detectByContent($file_data);
$ext_name = array_search($mime_type, MimeType::getExtensionToMimeTypeMap()); $ext_name = array_search($mime_type, MimeType::getExtensionToMimeTypeMap());
$temp_file = tempnam(app()->getRuntimePath(), 'url_save_') . '.' . $ext_name; $temp_file = tempnam(app()->getRuntimePath(), 'url_save_') . '.' . $ext_name;