158 lines
4.8 KiB
PHP
158 lines
4.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace app\controller;
|
||
|
|
||
|
use app\model\File;
|
||
|
use app\validate\Upload as VUpload;
|
||
|
use think\facade\Config;
|
||
|
use think\facade\Filesystem;
|
||
|
use think\facade\Lang;
|
||
|
use think\response\Json;
|
||
|
|
||
|
/**
|
||
|
* 文件上传
|
||
|
*
|
||
|
* Class Upload
|
||
|
* @package app\controller\api\file
|
||
|
*/
|
||
|
class Upload extends Base
|
||
|
{
|
||
|
protected $noNeedLogin = [];
|
||
|
|
||
|
// 图片上传是否进行压缩[max-width:1920px]
|
||
|
private bool $isCompress = false;
|
||
|
private $validate = null;
|
||
|
// 文件上传对外默认保存目录(相对路径)
|
||
|
private string $uploadPath = '';
|
||
|
private $videoUploadPath;
|
||
|
// 文件上传对外默认保存目录是否有写权限
|
||
|
private bool $uploadPathIsWritable = false;
|
||
|
private $videoUploadPathIsWritable = 0;
|
||
|
protected bool $saveToOos = false;
|
||
|
|
||
|
public function initialize()
|
||
|
{
|
||
|
parent::initialize();
|
||
|
|
||
|
// $system = System::getSystem();
|
||
|
// if (!empty($system)) {
|
||
|
// $this->isCompress = $system['compress'] ?? true;
|
||
|
// }
|
||
|
$this->validate = new VUpload();
|
||
|
$this->uploadPath = Config::get('filesystem.disks.local.url');
|
||
|
$this->videoUploadPath = Config::get('filesystem.disks.video.url');
|
||
|
|
||
|
if (!is_writable(app()->getRootPath().'public'.$this->uploadPath)) {
|
||
|
mkdir(app()->getRootPath().'public'.$this->uploadPath, 0777, true);
|
||
|
}
|
||
|
$this->uploadPathIsWritable = 1;
|
||
|
|
||
|
if (!is_writable(app()->getRootPath().'public'.$this->videoUploadPath)) {
|
||
|
mkdir(app()->getRootPath().'public'.$this->videoUploadPath, 0777, true);
|
||
|
}
|
||
|
|
||
|
$this->videoUploadPathIsWritable = 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 通用文件上传
|
||
|
* @return Json
|
||
|
*/
|
||
|
public function file()
|
||
|
{
|
||
|
$file = request()->file('file');
|
||
|
if (empty($file)) {
|
||
|
return $this->json(4001, '请上传的文件');
|
||
|
}
|
||
|
|
||
|
if ($this->validate->checkFile($file)) {
|
||
|
try {
|
||
|
if (!$this->uploadPathIsWritable) {
|
||
|
throw new \Exception('上传文件夹需要写入权限');
|
||
|
}
|
||
|
$src = Filesystem::putFile('files/'.date('Ym'), $file, 'uniqid');
|
||
|
$src = $this->uploadPath.'/'.$src;
|
||
|
$return['src'] = $src;
|
||
|
$return['name'] = $file->getOriginalName();
|
||
|
|
||
|
//加入上传文件表
|
||
|
File::add($file, $src, $file->md5());
|
||
|
} catch (\Exception $e) {
|
||
|
return $this->json(4003, $e->getMessage());
|
||
|
}
|
||
|
|
||
|
return $this->json(0, 'success', $return);
|
||
|
} else {
|
||
|
|
||
|
$errorMsg = Lang::get($this->validate->getError());
|
||
|
return $this->json(4002, $errorMsg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 通用图片上传
|
||
|
* @return Json
|
||
|
*/
|
||
|
public function image()
|
||
|
{
|
||
|
$image = request()->file('image');
|
||
|
if (empty($image)) {
|
||
|
return $this->json(4001, '请上传图片文件');
|
||
|
}
|
||
|
|
||
|
if (!in_array($image->getMime(), ['image/png', 'image/jpeg', 'image/bmp'])) {
|
||
|
return $this->json(4001, '请上传png|jpeg|jpg|bmp格式图片');
|
||
|
}
|
||
|
|
||
|
if ($image->getSize() > 1.5 * 1024 * 1024) {
|
||
|
return $this->json(4001, '图片超出尺寸要求');
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
if (!$this->uploadPathIsWritable) {
|
||
|
throw new \Exception('上传文件夹需要写入权限');
|
||
|
}
|
||
|
$src = Filesystem::putFile('images/'.date('Ym'), $image, 'uniqid');
|
||
|
$src = $this->uploadPath.'/'.$src;
|
||
|
$return['src'] = $src;
|
||
|
} catch (\Exception $e) {
|
||
|
return $this->json(4003, $e->getMessage());
|
||
|
}
|
||
|
|
||
|
return $this->json(0, 'success', $return);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 通用视频上传
|
||
|
* @return Json
|
||
|
*/
|
||
|
public function video()
|
||
|
{
|
||
|
try {
|
||
|
$file = request()->file('video');
|
||
|
$md5 = $file->md5();//文件md5
|
||
|
if ($this->validate->checkVideo($file)) {
|
||
|
if (!$this->videoUploadPathIsWritable) {
|
||
|
throw new \Exception('上传文件夹需要写入权限');
|
||
|
}
|
||
|
|
||
|
$src = Filesystem::putFile('videos/'.date('Ym'), $file, 'uniqid');
|
||
|
$src = $this->uploadPath.'/'.$src;
|
||
|
$return['src'] = $src;
|
||
|
$return['full_src'] = resourceJoin($src);
|
||
|
|
||
|
//加入上传文件表
|
||
|
File::add($file, $src, $md5, 'video');
|
||
|
|
||
|
return $this->json(0, 'success', $return);
|
||
|
} else {
|
||
|
$errorMsg = Lang::get($this->validate->getError());
|
||
|
return $this->json(4002, $errorMsg);
|
||
|
}
|
||
|
} catch (\Exception $e) {
|
||
|
return $this->json(4000, $e->getMessage());
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|