UploadController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Storage;
  5. class UploadController extends Controller
  6. {
  7. /**
  8. * 上传图片
  9. */
  10. public function upload(Request $request)
  11. {
  12. // 验证请求
  13. $request->validate([
  14. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  15. 'bucket' => 'required|string', // 验证桶名
  16. ]);
  17. // 获取桶名
  18. $bucket = $request->input('bucket');
  19. // 上传文件到指定的 S3 桶
  20. $path = $request->file('file')->store('uploads', $bucket);
  21. // 获取文件名
  22. $filename = basename($path);
  23. // 生成文件的 URL
  24. $url = Storage::disk($bucket)->url($path);
  25. // 返回文件名和 URL
  26. return response()->json([
  27. 'filename' => $filename,
  28. 'url' => $url, // 返回文件的 URL
  29. ], 201);
  30. }
  31. /**
  32. * 上传项目图片
  33. */
  34. public function uploadProjectCate(Request $request)
  35. {
  36. // 验证请求
  37. $request->validate([
  38. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  39. ]);
  40. // 获取桶名
  41. $bucket = 'project-image';
  42. // 上传文件到指定的 S3 桶
  43. $path = $request->file('file')->store('uploads', $bucket);
  44. // 获取文件名
  45. $filename = basename($path);
  46. // 生成文件的 URL
  47. $url = Storage::disk($bucket)->url($path);
  48. // 返回文件名和 URL
  49. return response()->json([
  50. 'filename' => $filename,
  51. 'url' => $url, // 返回文件的 URL
  52. ], 201);
  53. }
  54. /**
  55. * 上传用户图片
  56. */
  57. public function uploadUserImage(Request $request)
  58. {
  59. // 验证请求
  60. $request->validate([
  61. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  62. ]);
  63. // 获取桶名
  64. $bucket = 'user-image';
  65. // 上传文件到指定的 S3 桶
  66. $path = $request->file('file')->store('uploads', $bucket);
  67. // 获取文件名
  68. $filename = basename($path);
  69. // 生成文件的 URL
  70. $url = Storage::disk($bucket)->url($path);
  71. // 返回文件名和 URL
  72. return response()->json([
  73. 'filename' => $filename,
  74. 'url' => $url, // 返回文件的 URL
  75. ], 201);
  76. }
  77. /**
  78. * 上传用户其他图片
  79. */
  80. public function uploadUserOther(Request $request)
  81. {
  82. // 验证请求
  83. $request->validate([
  84. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  85. ]);
  86. // 获取桶名
  87. $bucket = 'user-other';
  88. // 上传文件到指定的 S3 桶
  89. $path = $request->file('file')->store('uploads', $bucket);
  90. // 获取文件名
  91. $filename = basename($path);
  92. // 生成文件的 URL
  93. $url = Storage::disk($bucket)->url($path);
  94. // 返回文件名和 URL
  95. return response()->json([
  96. 'filename' => $filename,
  97. 'url' => $url, // 返回文件的 URL
  98. ], 201);
  99. }
  100. /**
  101. * 上传技师资质图片
  102. */
  103. public function uploadTechQualification(Request $request)
  104. {
  105. // 验证请求
  106. $request->validate([
  107. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  108. ]);
  109. // 获取桶名
  110. $bucket = 'te-qualification-image';
  111. // 上传文件到指定的 S3 桶
  112. $path = $request->file('file')->store('uploads', $bucket);
  113. // 获取文件名
  114. $filename = basename($path);
  115. // 生成文件的 URL
  116. $url = Storage::disk($bucket)->url($path);
  117. // 返回文件名和 URL
  118. return response()->json([
  119. 'filename' => $filename,
  120. 'url' => $url, // 返回文件的 URL
  121. ], 201);
  122. }
  123. /**
  124. * 上传技师形象照、技师工作照图片
  125. */
  126. public function uploadTechnicianPhoto(Request $request)
  127. {
  128. // 验证请求
  129. $request->validate([
  130. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  131. ]);
  132. // 获取桶名
  133. $bucket = 'te-photo-image';
  134. // 上传文件到指定的 S3 桶
  135. $path = $request->file('file')->store('uploads', $bucket);
  136. // 获取文件名
  137. $filename = basename($path);
  138. // 生成文件的 URL
  139. $url = Storage::disk($bucket)->url($path);
  140. // 返回文件名和 URL
  141. return response()->json([
  142. 'filename' => $filename,
  143. 'url' => $url, // 返回文件的 URL
  144. ], 201);
  145. }
  146. /**
  147. * 上传技师其他图片
  148. */
  149. public function uploadTechOther(Request $request)
  150. {
  151. // 验证请求
  152. $request->validate([
  153. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  154. ]);
  155. // 获取桶名
  156. $bucket = 'te-other-image';
  157. // 上传文件到指定的 S3 桶
  158. $path = $request->file('file')->store('uploads', $bucket);
  159. // 获取文件名
  160. $filename = basename($path);
  161. // 生成文件的 URL
  162. $url = Storage::disk($bucket)->url($path);
  163. // 返回文件名和 URL
  164. return response()->json([
  165. 'filename' => $filename,
  166. 'url' => $url, // 返回文件的 URL
  167. ], 201);
  168. }
  169. /**
  170. * 上传其他图片
  171. */
  172. public function uploadOther(Request $request)
  173. {
  174. // 验证请求
  175. $request->validate([
  176. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  177. ]);
  178. // 获取桶名
  179. $bucket = 'other-image';
  180. // 上传文件到指定的 S3 桶
  181. $path = $request->file('file')->store('uploads', $bucket);
  182. // 获取文件名
  183. $filename = basename($path);
  184. // 生成文件的 URL
  185. $url = Storage::disk($bucket)->url($path);
  186. // 返回文件名和 URL
  187. return response()->json([
  188. 'filename' => $filename,
  189. 'url' => $url, // 返回文件的 URL
  190. ], 201);
  191. }
  192. public function download(Request $request)
  193. {
  194. // 获取桶名
  195. $bucket = $request->input('bucket');
  196. $filename = $request->input('filename');
  197. // 从指定的 S3 桶获取文件
  198. $filePath = 'uploads/' . $filename;
  199. if (!Storage::disk($bucket)->exists($filePath)) {
  200. return response()->json(['message' => 'File not found.'], 404);
  201. }
  202. // 返回文件下载响应
  203. return Storage::disk($bucket)->download($filePath);
  204. }
  205. }