我的应用程序中的默认图像上传过程如下。
从请求中获取图像并将其存储到 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)网址?
注意:我使用Intervention Image包
最佳答案
Storage::put()
仅当路径是 File
或 UploadedFile
( 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/