UploadController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. public function upload(Request $request)
  8. {
  9. // 验证请求
  10. $request->validate([
  11. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  12. 'bucket' => 'required|string', // 验证桶名
  13. ]);
  14. // 获取桶名
  15. $bucket = $request->input('bucket');
  16. // 上传文件到指定的 S3 桶
  17. $path = $request->file('file')->store('uploads', $bucket);
  18. // 获取文件名
  19. $filename = basename($path);
  20. // 生成文件的 URL
  21. $url = Storage::disk($bucket)->url($path);
  22. // 返回文件名和 URL
  23. return response()->json([
  24. 'filename' => $filename,
  25. 'url' => $url, // 返回文件的 URL
  26. ], 201);
  27. }
  28. public function uploadProjectCate(Request $request)
  29. {
  30. // 验证请求
  31. $request->validate([
  32. 'file' => 'required|file|mimes:jpg,jpeg,png,gif|max:2048',
  33. ]);
  34. // 获取桶名
  35. $bucket = 'project-cate';
  36. // 上传文件到指定的 S3 桶
  37. $path = $request->file('file')->store('uploads', $bucket);
  38. // 获取文件名
  39. $filename = basename($path);
  40. // 生成文件的 URL
  41. $url = Storage::disk($bucket)->url($path);
  42. // 返回文件名和 URL
  43. return response()->json([
  44. 'filename' => $filename,
  45. 'url' => $url, // 返回文件的 URL
  46. ], 201);
  47. }
  48. public function download(Request $request)
  49. {
  50. // 获取桶名
  51. $bucket = $request->input('bucket');
  52. $filename = $request->input('filename');
  53. // 从指定的 S3 桶获取文件
  54. $filePath = 'uploads/' . $filename;
  55. if (!Storage::disk($bucket)->exists($filePath)) {
  56. return response()->json(['message' => 'File not found.'], 404);
  57. }
  58. // 返回文件下载响应
  59. return Storage::disk($bucket)->download($filePath);
  60. }
  61. public function view(Request $request)
  62. {
  63. // 获取桶名
  64. $bucket = $request->input('bucket');
  65. $filename = $request->input('filename');
  66. // 从指定的 S3 桶获取文件
  67. $filePath = 'uploads/' . $filename;
  68. if (!Storage::disk($bucket)->exists($filePath)) {
  69. return response()->json(['message' => 'File not found.'], 404);
  70. }
  71. // 获取文件的大小和 MIME 类型
  72. $size = Storage::disk($bucket)->size($filePath);
  73. $mimetype = Storage::disk($bucket)->mimeType($filePath);
  74. $url = Storage::disk($bucket)->url($filePath); // 生成文件的 URL
  75. // 返回文件的元数据和 URL
  76. return response()->json([
  77. 'filename' => $filename,
  78. 'size' => $size,
  79. 'mimetype' => $mimetype,
  80. 'url' => $url, // 返回文件的 URL
  81. ]);
  82. }
  83. }