Upload.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. protected $config;
  13. protected $user;
  14. /**
  15. * 构造方法
  16. */
  17. public function initialize()
  18. {
  19. parent::initialize();
  20. // 存储配置信息
  21. $this->config = SettingModel::getItem('storage');
  22. // 验证用户
  23. $this->user = $this->getUser();
  24. }
  25. /**
  26. * 身份证照片
  27. */
  28. public function idcard()
  29. {
  30. $post = $this->postData();
  31. if (empty($post['order_no'])) {
  32. return json(['code' => 0, 'msg' => '订单号为空']);
  33. }
  34. if (empty($post['set'])) {
  35. return json(['code' => 0, 'msg' => '正反标识为空']);
  36. }
  37. if (empty($_FILES)) {
  38. return json(['code' => 0, 'msg' => '请选择上传图片']);
  39. }
  40. $temp = explode(".",$_FILES['iFile']["name"]);
  41. $extension = end($temp);
  42. $srt = $post['set'] == 1?'A':'b';
  43. $imageName = $post['order_no'].'_'.$srt.'.'.$extension;
  44. $tempPath = root_path('public') .'idcard/'.date('Ymd');
  45. !is_dir($tempPath) && mkdir($tempPath, 0755, true);
  46. $imageSrc = $tempPath."/". $imageName; //图片名字
  47. if (!move_uploaded_file($_FILES['iFile']["tmp_name"],$imageSrc)) {
  48. return json(['code' => 0, 'msg' => '上传失败!']);
  49. }
  50. $src = base_url().'idcard/'.date('Ymd').'/'.$imageName;
  51. return json(['code' => 1, 'msg' => '上传成功', 'src' => $src]);
  52. }
  53. /**
  54. * 图片上传接口
  55. */
  56. public function image()
  57. {
  58. // 实例化存储驱动
  59. $StorageDriver = new StorageDriver($this->config);
  60. // 图片信息
  61. $fileInfo = request()->file('iFile');
  62. if(!$StorageDriver->validate('iFile', $fileInfo, 'image')){
  63. return json(['code' => 0, 'msg' => $StorageDriver->getError()]);
  64. }
  65. // 设置上传文件的信息
  66. $StorageDriver->setUploadFile('iFile');
  67. // 上传图片
  68. $saveName = $StorageDriver->upload();
  69. if ($saveName == '') {
  70. return json(['code' => 0, 'msg' => '图片上传失败' . $StorageDriver->getError()]);
  71. }
  72. $saveName = str_replace('\\', '/', $saveName);
  73. // 图片上传路径
  74. $fileName = $StorageDriver->getFileName();
  75. // 添加文件库记录
  76. $uploadFile = $this->addUploadFile($fileName, $fileInfo, 'image', $saveName);
  77. $data = [
  78. 'file_id' => $uploadFile['file_id'],
  79. 'file_path' => $uploadFile['file_path'],
  80. ];
  81. // 图片上传成功
  82. return json(['code' => 1, 'msg' => '图片上传成功', 'data' => $data]);
  83. }
  84. /**
  85. * 添加文件库上传记录
  86. */
  87. private function addUploadFile($fileName, $fileInfo, $fileType, $savename)
  88. {
  89. // 存储引擎
  90. $storage = $this->config['default'];
  91. // 存储域名
  92. $fileUrl = isset($this->config['engine'][$storage]['domain'])
  93. ? $this->config['engine'][$storage]['domain'] : '';
  94. // 添加文件库记录
  95. $model = new UploadFileModel;
  96. $data = $this->postData();
  97. $model->add([
  98. 'storage' => $storage,
  99. 'file_url' => $fileUrl,
  100. 'file_name' => $fileName,
  101. 'save_name' => $savename,
  102. 'file_size' => $fileInfo->getSize(),
  103. 'file_type' => $fileType,
  104. 'extension' => $fileInfo->getOriginalExtension(),
  105. 'real_name' => $fileInfo->getOriginalName(),
  106. 'is_user' => 1,
  107. 'app_id' => $data['app_id']
  108. ]);
  109. return $model;
  110. }
  111. }