123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- <?php
- namespace Modules\Common\Support\Upload\Uses;
- use Catch\Exceptions\FailedException;
- use Illuminate\Http\UploadedFile;
- use Illuminate\Support\Str;
- abstract class Upload
- {
- /**
- * uploadFile object
- *
- * @var mixed
- */
- protected mixed $file;
- /**
- *
- * @var array
- */
- protected array $params;
- public abstract function upload();
- /**
- *
- * @return mixed|true
- */
- protected function dealBeforeUpload(): mixed
- {
- $this->checkExt();
- $this->checkSize();
- // 如果是上传图片资源的的话保存
- // 如果是由其他方式上传的图片路径就直接返回
- if (!$this->file instanceof UploadedFile) {
- return $this->file;
- }
- // if ($this instanceof OssUploadService) {
- // return $this->file->getPathname();
- // }
- return true;
- }
- /**
- *
- * @return array
- */
- public function getUploadPath(): array
- {
- $method = $this->getUploadMethod();
- return $this->info($this->{$method}());
- }
- /**
- * 生成文件名称
- *
- * @time 2019年07月26日
- * @param string $ext
- * @return string
- */
- protected function generateImageName(string $ext): string
- {
- $filename = $this->params['filename'] ?? '';
- $randomString = date('Y') . Str::random(10) . time();
- if ($filename) {
- $randomString = $filename . '_' . $randomString;
- }
- return $randomString . '.' . $ext;
- }
- /**
- * upload method
- *
- * @return string
- */
- protected function getUploadMethod(): string
- {
- $class = get_called_class();
- $class = explode('\\', $class);
- $className = array_pop($class);
- $method = lcfirst($className);
- if (!method_exists($this, $method)) {
- throw new FailedException(sprintf('Method %s in Class %s Not Found~', $method, $className));
- }
- return $method;
- }
- /**
- * get uploaded file info
- *
- * @param $path
- * @return array
- */
- protected function info($path): array
- {
- return [
- 'path' => $path,
- 'ext' => $this->getUploadedFileExt(),
- 'type' => $this->getUploadedFileMimeType(),
- 'size' => $this->getUploadedFileSize(),
- 'originalName' => $this->getOriginName(),
- ];
- }
- /**
- * check extension
- */
- protected function checkExt(): void
- {
- $extensions = config(sprintf('upload.%s.ext', $this->getUploadedFileMimeType()));
- $fileExt = $this->getUploadedFileExt();
- if (!in_array($fileExt, $extensions)) {
- throw new FailedException(sprintf('不支持该上传文件类型(%s)类型', $fileExt));
- }
- }
- /**
- * check file size
- */
- protected function checkSize(): void
- {
- $size = 10 * 1024 * 1024;
- if ($this->getUploadedFileSize() > $size) {
- throw new FailedException('超过文件最大支持的大小');
- }
- }
- /**
- * get uploaded file mime type
- *
- * @return string
- */
- protected function getUploadedFileMimeType(): string
- {
- if ($this->file instanceof UploadedFile) {
- $imageMimeType = [
- 'image/gif', 'image/jpeg', 'image/png', 'application/x-shockwave-flash',
- 'image/psd', 'image/bmp', 'image/tiff', 'image/jp2',
- 'application/x-shockwave-flash', 'image/iff', 'image/vnd.wap.wbmp', 'image/xbm',
- 'image/vnd.microsoft.icon', 'image/x-icon', 'image/*', 'image/jpg',
- ];
- return in_array($this->file->getClientMimeType(), $imageMimeType) ? 'image' : 'file';
- }
- return in_array($this->getUploadedFileExt(), config('upload.image.ext')) ? 'image' : 'file';
- }
- /**
- * get uploaded file extension
- *
- * @return array|string
- */
- protected function getUploadedFileExt(): array|string
- {
- if ($this->file instanceof UploadedFile) {
- return strtolower($this->file->getClientOriginalExtension());
- }
- // 直传文件
- return pathinfo($this->file, PATHINFO_EXTENSION);
- }
- /**
- * get uploaded file size
- *
- * @return false|int
- */
- protected function getUploadedFileSize(): bool|int
- {
- if ($this->file instanceof UploadedFile) {
- return $this->file->getSize();
- }
- return 0;
- }
- /**
- * get origin name
- *
- * @return string|null
- */
- public function getOriginName(): ?string
- {
- // 上传图片获取
- if ($this->file instanceof UploadedFile) {
- return $this->file->getClientOriginalName();
- }
- return '';
- }
- /**
- * 参数设置
- *
- * @time 2019年07月25日
- * @param $name
- * @param $value
- */
- public function __set($name, $value)
- {
- $this->{$name} = $value;
- }
- /**
- * set uploaded file
- *
- * @param mixed $file
- * @return $this
- */
- public function setUploadedFile(mixed $file): static
- {
- $this->file = $file;
- return $this;
- }
- }
|