| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- /**
- * 文件上传
- * @聊天过程中的文件上传(图片、声音、视频等)
- */
- namespace app\home\controller;
- use think\File;
- class Upload extends AdminControl
- {
- /**
- * 上传文件目录
- * @access protected
- * @var string
- */
- protected $upload_dir;
-
- /**
- * domain
- * @access public
- * @var string
- */
- protected $domain;
-
- /**
- * 文件类型
- * @access protected
- * @var array
- */
- protected $file_type = [
- 'image' => [
- 'title' => '图片',
- 'dir' => '/image/'
- ],
- 'video' => [
- 'title' => '视频',
- 'dir' => '/video/'
- ],
- 'voice' => [
- 'title' => '声音',
- 'dir' => '/voice/'
- ],
- 'file' => [
- 'title' => '文件',
- 'dir' => '/file/'
- ],
- ];
-
- /**
- * 文件允许大小
- * @access proetcted
- * @var array
- */
- protected $file_allow_size = [
- 'image' => 5120000,//5M
- 'video' => 20480000,//20M
- 'voice' => 20480000,//20M
- 'file' => 20480000,//20M
- ];
-
- /**
- * 文件允许格式
- * @access protected
- * @var array
- */
- protected $file_allow_ext = [
- 'image' => [
- 'gif', 'jpg', 'jpeg', 'png', 'bmp'
- ],
- 'video' => [
- 'mp4', 'avi', 'ogg', 'flv', 'webm',
- 'ogv', 'mpg'
- ],
- 'voice' => [
- 'mp3', 'ogg', 'wav', 'm4a'
- ],
- 'file' => [],
- ];
-
- public function _initialize()
- {
- parent::_initialize();
-
- if (!empty(config('FILE_UPLOADS_DIR'))) {
- $this->upload_dir = config('FILE_UPLOADS_DIR');
- }
-
- $this->domain = !empty($this->request->domain()) ? $this->request->domain() : '';
- }
-
- /**
- * @上传文件
- * @param
- * @access
- * @return
- */
- public function upFile()
- {
- $type = !empty($this->request->param('type')) ? $this->request->param('type') : '';
-
- if (empty($type)) {
- return ['status' => 0, 'msg' => 'error[expect type]'];
- }
-
- if (!in_array($type, array_keys($this->file_type))) {
- return ['status' => 0, 'msg' => 'error[type not exist]'];
- }
-
- try {
- $file = $this->request->file($type);
- } catch (\Exception $e) {
- return ['status' => 0, 'msg' => 'error[file empty]'];
- }
- if (empty($file)) {
- return ['status' => 0, 'msg' => 'error[file empty]'];
- }
-
- $res = $this->_upFile($file, $type);
-
- if ($res['status'] != 1) {
- return $res;
- }
-
- return ['status' => 200, 'msg' => 'success', 'data' => $res['data']];
- }
-
- /**
- * @上传操作
- * @param object $file
- * @param string $type
- * @access protected
- * @return array
- */
- protected function _upFile(File $file, $type)
- {
- //验证文件类型
- if (!empty($this->file_allow_ext[$type]) && $file->checkExt($this->file_allow_ext[$type]) === false) {
- return [
- 'status' => 0,
- 'msg' => '文件格式不允许',
- ];
- }
-
- //验证大小
- if (!empty($this->file_allow_size[$type]) && $file->checkSize($this->file_allow_size[$type]) === false) {
- return [
- 'status' => 0,
- 'msg' => '文件大小不符',
- ];
- }
-
- $info = $file->move('.'.$this->upload_dir.$this->file_type[$type]['dir']);
-
- if (empty($info)) {
- return [
- 'status' => 0,
- 'msg' => $file->getError(),
- ];
- }
-
- return [
- 'status' => 1,
- 'msg' => 'success',
- 'data' => [
- 'ext' => $info->getExtension(),
- 'name' => $info->getFilename(),
- 'path' => $this->domain.str_replace("\\", "/", $this->upload_dir.$this->file_type[$type]['dir'].$info->getSaveName()),
- ],
- ];
- }
-
- }
|