Upload.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace app\api\controller\file;
  3. use app\api\controller\Controller;
  4. use app\api\model\file\UploadFile as UploadFileModel;
  5. use app\api\model\settings\Setting as SettingModel;
  6. use app\common\library\storage\Driver as StorageDriver;
  7. /**
  8. * 文件库管理
  9. */
  10. class Upload extends Controller
  11. {
  12. private $config;
  13. private $user;
  14. /**
  15. * 构造方法
  16. */
  17. public function initialize()
  18. {
  19. // 存储配置信息
  20. $this->config = SettingModel::getItem('storage');
  21. // 验证用户
  22. $this->user = $this->getUser();
  23. }
  24. /**
  25. * 图片上传接口
  26. */
  27. public function image()
  28. {
  29. // 实例化存储驱动
  30. $StorageDriver = new StorageDriver($this->config);
  31. // 图片信息
  32. $fileInfo = request()->file('iFile');
  33. if(!$StorageDriver->validate('iFile', $fileInfo, 'image')){
  34. return json(['code' => 0, 'msg' => $StorageDriver->getError()]);
  35. }
  36. // 设置上传文件的信息
  37. $StorageDriver->setUploadFile('iFile');
  38. // 上传图片
  39. $saveName = $StorageDriver->upload();
  40. if ($saveName == '') {
  41. return json(['code' => 0, 'msg' => '图片上传失败' . $StorageDriver->getError()]);
  42. }
  43. $saveName = str_replace('\\', '/', $saveName);
  44. // 图片上传路径
  45. $fileName = $StorageDriver->getFileName();
  46. // 添加文件库记录
  47. $uploadFile = $this->addUploadFile($fileName, $fileInfo, 'image', $saveName);
  48. $data = [
  49. 'file_id' => $uploadFile['file_id'],
  50. 'file_path' => $uploadFile['file_path'],
  51. ];
  52. // 图片上传成功
  53. return json(['code' => 1, 'msg' => '图片上传成功', 'data' => $data]);
  54. }
  55. /**
  56. * 添加文件库上传记录
  57. */
  58. private function addUploadFile($fileName, $fileInfo, $fileType, $savename)
  59. {
  60. // 存储引擎
  61. $storage = $this->config['default'];
  62. // 存储域名
  63. $fileUrl = isset($this->config['engine'][$storage]['domain'])
  64. ? $this->config['engine'][$storage]['domain'] : '';
  65. // 添加文件库记录
  66. $model = new UploadFileModel;
  67. $data = $this->postData();
  68. $model->add([
  69. 'storage' => $storage,
  70. 'file_url' => $fileUrl,
  71. 'file_name' => $fileName,
  72. 'save_name' => $savename,
  73. 'file_size' => $fileInfo->getSize(),
  74. 'file_type' => $fileType,
  75. 'extension' => $fileInfo->getOriginalExtension(),
  76. 'real_name' => $fileInfo->getOriginalName(),
  77. 'is_user' => 1,
  78. 'app_id' => $data['app_id']
  79. ]);
  80. return $model;
  81. }
  82. }