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

标签 laravel amazon-web-services amazon-s3

我的应用程序中的默认图像上传过程如下。

从请求中获取图像并将其存储到 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() 仅当路径是 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/

相关文章:

ruby-on-rails - AWS::S3::错误::访问拒绝。无法使用 Ruby on Rails 保存到 S3

python - 如何使用 python boto 为 amazon S3 中存在的文件生成下载链接?

php - laravel : it cannot find a request that i just created 中的反射异常

php - 谷歌云空间/图像部署错误,构建未完成

sql - 在原始 sql 查询 Laravel 中插入变量

java - 限制 iOS 和 Android 的入站流量

php - 更改 Laravel Jetstream 应用程序中的 Logo

amazon-web-services - 是否可以使负载均衡器 (ELB) 只能由 SNS 访问?

java - JanusGraph 中的遍历序列化错误

html - 如何更新托管在 aws s3 上的网站的网页?