UploadController.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 download(Request $request)
  29. {
  30. // 获取桶名
  31. $bucket = $request->input('bucket');
  32. $filename = $request->input('filename');
  33. // 从指定的 S3 桶获取文件
  34. $filePath = 'uploads/' . $filename;
  35. if (!Storage::disk($bucket)->exists($filePath)) {
  36. return response()->json(['message' => 'File not found.'], 404);
  37. }
  38. // 返回文件下载响应
  39. return Storage::disk($bucket)->download($filePath);
  40. }
  41. public function view(Request $request)
  42. {
  43. // 获取桶名
  44. $bucket = $request->input('bucket');
  45. $filename = $request->input('filename');
  46. // 从指定的 S3 桶获取文件
  47. $filePath = 'uploads/' . $filename;
  48. if (!Storage::disk($bucket)->exists($filePath)) {
  49. return response()->json(['message' => 'File not found.'], 404);
  50. }
  51. // 获取文件的大小和 MIME 类型
  52. $size = Storage::disk($bucket)->size($filePath);
  53. $mimetype = Storage::disk($bucket)->mimeType($filePath);
  54. $url = Storage::disk($bucket)->url($filePath); // 生成文件的 URL
  55. // 返回文件的元数据和 URL
  56. return response()->json([
  57. 'filename' => $filename,
  58. 'size' => $size,
  59. 'mimetype' => $mimetype,
  60. 'url' => $url, // 返回文件的 URL
  61. ]);
  62. }
  63. }