UploadController.php 2.2 KB

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