如何使用Laravel获取上传到s3的文件的完整URL?

时间:2018-10-01 21:05:23

标签: laravel amazon-web-services amazon-s3

我有这个功能可以将图片上传到buckets3上的一个AWS

$image = $picture;
$ext = explode(";", explode("/",explode(",", $image)[0])[1])[0];
$image = str_replace('data:image/'.$ext.';base64,', '', $image);
$image = str_replace(' ', '+', $image);
$imageName = str_random(10) . '.' . $ext;
$fullImagePath = 'datasheets/' . $imageName;
Storage::disk('s3')->put($fullImagePath, base64_decode($image));

$DataSheetPicture = new DataSheetPicture();
$DataSheetPicture->data_sheet_id = $DataSheet->id;
$DataSheetPicture->picture = Storage::disk('s3')->url($fullImagePath);
$DataSheetPicture->save();

上面的代码工作正常,可以将图片成功上传到bucket,但是在这一行

$DataSheetPicture->picture = Storage::disk('s3')->url($fullImagePath);

它将URL像这样保存在数据库中

  

/datasheets/6GcfzgUPrA.jpeg
  /datasheets/AuqHmu8p0W.jpeg

但是我需要这样的网址

  

https://s3.REGION.amazonaws.com/BUCKET-NAME/FULL-IMAGE-PATH

我不想连接区域或存储桶名称,因为它可能是动态的

1 个答案:

答案 0 :(得分:1)

以下内容将为您提供正确的URL:

return Storage::disk('s3')->url($filename);

Laravel 5.2起,您还可以使用cloud()

return Storage::cloud()->url($filename);
  

我不想连接区域或存储桶名称,因为它可能是动态的

然后,您必须修改配置,而不是手动执行此操作才能正常工作,例如:

config([
    'filesystem.disks.s3.bucket'   => 'my_bucket'
    'filesystem.disks.s3.region    => 'my_region'
]);