UploadServer.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App\Services;
  3. use App\Model\SystemConfig;
  4. use App\Server\Upload\OssServer;
  5. class UploadServer
  6. {
  7. /***
  8. * 上传到阿里云
  9. * @param $field
  10. * @param $request
  11. * @param string $tag
  12. * @param float|int $size
  13. * @param array $mimeType
  14. * @return mixed
  15. */
  16. public function aliUpload($field, $request, $size = 10 * 1024 * 1024, array $mimeType = ['image/jpeg', 'image/png', 'image/gif','video/mp4','video/quicktime'])
  17. {
  18. $conf = SystemConfig::get('ali_config', 'oss', '{}');
  19. $conf = json_decode($conf, true);
  20. $class = isset($request['class']) ? $request['class'] : 1;
  21. $file = $request[$field];
  22. if ($file === null) {
  23. return ['message' => '没有文件被上传'];
  24. }
  25. if (!$file->isValid()) {
  26. return ['message' => '不允许上传'];
  27. }
  28. $fileSize = $file->getSize();
  29. if ($fileSize > $size) {
  30. return ['message' => '文件大小超过限制'];
  31. }
  32. $fileMimeType = $file->getMimeType();
  33. if (!empty($mimeType) && !in_array($fileMimeType, $mimeType)) {
  34. return ['message' => '文件格式不被允许'];
  35. }
  36. $clientName = $file->getClientOriginalName();
  37. $md5 = md5($clientName . time());
  38. $md5_filename = $md5 . '.' . $file->getClientOriginalExtension();
  39. $file_Path = $file->getRealPath();
  40. try {
  41. $ok = OssServer::publicUpload($conf['BucketName']['value'], $md5_filename, $file_Path);
  42. if (!$ok) {
  43. return ['message' => '上传失败'];
  44. } else {
  45. return ['url' => $conf['FileUrl']['value'] . $md5_filename, 'message' => '上传成功'];
  46. }
  47. } catch (\Exception $e) {
  48. return ['message' => $e->getMessage()];
  49. }
  50. }
  51. /**
  52. * 直接上
  53. * @param $field
  54. * @param $request
  55. * @param float|int $size
  56. * @param array $mimeType
  57. * @return array
  58. */
  59. public function direct_upload($field,$clientName,$ext)
  60. {
  61. $conf = SystemConfig::get('ali_config', 'oss', '{}');
  62. $md5 = md5($clientName . time());
  63. $md5_filename = $md5 . '.' . $ext;
  64. try {
  65. $ok = OssServer::publicUpload($conf['BucketName']['value'], $md5_filename, $field);
  66. if (!$ok) {
  67. return ['message' => '上传失败'];
  68. } else {
  69. return ['url' => $conf['FileUrl']['value'] . $md5_filename, 'message' => '上传成功'];
  70. }
  71. } catch (\Exception $e) {
  72. return ['message' => $e->getMessage()];
  73. }
  74. }
  75. public function fileUpload($field, $request, $tag = 'files', $size = 10 * 1024 * 1024, array $mimeType = ['image/jpeg', 'image/png', 'image/gif','video/mp4','video/quicktime','text/plain'])
  76. {
  77. $tag = $request['folder'];
  78. $class = isset($request['class']) ? $request['class'] : 1;
  79. $width = isset($request['width']) ? $request['width'] : 0;
  80. $height = isset($request['height']) ? $request['height'] : 0;
  81. $rel_path = $tag . '/' . date('Ymd');
  82. $path = public_path() . $rel_path;
  83. if (!file_exists($path)) {
  84. if (!@mkdir($path, 0755, true)) {
  85. return ['message' => '目录创建失败'];
  86. }
  87. }
  88. $file = $request[$field];
  89. if ($file === null) {
  90. return ['message' => '没有文件被上传'];
  91. }
  92. if (!$file->isValid()) {
  93. return ['message' => '不允许上传'];
  94. }
  95. $fileSize = $file->getSize();
  96. if ($fileSize > $size) {
  97. return ['message' => '文件大小超过限制'];
  98. }
  99. $fileMimeType = $file->getMimeType();
  100. if (!empty($mimeType) && !in_array($fileMimeType, $mimeType)) {
  101. return ['message' => '文件格式不被允许'];
  102. }
  103. $clientName = $file->getClientOriginalName();
  104. $md5 = md5($clientName . time());
  105. $md5_filename = $md5 . '.' . $file->getClientOriginalExtension();
  106. try {
  107. if (!$file->move($path, $md5_filename)) {
  108. return ['message' => '上传失败'];
  109. }
  110. $real_path = $path . '/' . $md5_filename;
  111. $url_path = $rel_path . '/' . $md5_filename;
  112. $source_info = null;
  113. if (($source_info = getimagesize($real_path)) != null) {
  114. $source_width = $source_info[0];
  115. $source_height = $source_info[1];
  116. if ($width || $height) {
  117. if ($width == 0) {
  118. $width = $source_width * ($height / $source_height);
  119. }
  120. if ($height == 0) {
  121. $height = $source_height * ($width / $source_width);
  122. }
  123. Image::make($real_path)->resize($width, $height)->save($real_path);
  124. }
  125. }
  126. return ['message' => "上传成功", 'fileurl' => $url_path, 'name' => $md5_filename];
  127. } catch (\Exception $e) {
  128. return ['message' => $e->getMessage()];
  129. }
  130. }
  131. /**
  132. * 删除附件
  133. *
  134. * @param $md5 string 删除文件的md5码
  135. * @return int 错误码or 0(成功)
  136. */
  137. public function deleteAttachment($md5_filename)
  138. {
  139. $conf = SystemConfig::get('ali_config', 'oss', '{}');
  140. $conf = json_decode($conf, true);
  141. OssServer::publicDeleteObject($conf['BucketName']['value'], $md5_filename);
  142. }
  143. }