store("images", "s3"-6ren">
gpt4 book ai didi

laravel - 调整图像大小并将其存储到 s3

转载 作者:行者123 更新时间:2023-12-04 03:43:21 26 4
gpt4 key购买 nike

我的应用程序中的默认图片上传过程是这样的。

从请求中获取图像并将其存储到 s3 和局部变量。

$path = $request->file("image")->store("images", "s3");

在此之后我将其公开。

Storage::disk("s3")->setVisibility($path, 'public');

然后像这样存储到数据库。

   $variable = ModelName::create([
"image" => basename($path),
"image_url" => Storage::disk("s3")->url($path),

但是如何在将图像存储到 s3 之前调整图像大小?

我试着这样写

    $extension = $request->file('image')->getClientOriginalExtension();
$normal = Image::make($request->file('image'))->resize(160, 160)->encode($extension);
$filename = md5(time()).'_'.$request->file('image')->getClientOriginalName();
$img = Storage::disk('s3')->put('/images/'.$filename, (string)$normal, 'public');

然后

    "image" => basename($filename ),
"image_url" => Storage::disk("s3")->url($img),

除一件事外,这有效。我无法获取上传图片的 URL(用于存储数据库)。

如何为上传的图片获取正确的公共(public) url?

注意:我用的是Intervention Image包裹

最佳答案

Storage::put() 只会返回路径,前提是它是 FileUploadedFile ( source ) 的实例。在这种情况下,$normal 不是,所以 put() 会返回一个 bool 值。此外,使用 getClientOriginalExtension() 可能不是一个好主意,因为它不被认为是安全值 ( source )。

所以这是一个稍微改进的版本:

$filename = $request->file('file')->hashname();
$image = Image::make($request->file('file'))->resize(160, 160);
Storage::disk('s3')->put('/images/'.$filename, $image->stream(), 'public');
$url = Storage::disk('s3')->url('/images/'.$filename);

您现在可以将 $url$filename 保存到您的数据库中。

关于laravel - 调整图像大小并将其存储到 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65568928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com