【问题标题】:How do I store a base64 encoded image inside of laravel using the storeas method()?如何使用 storeas 方法()在 laravel 中存储 base64 编码的图像?
【发布时间】:2023-04-10 03:50:01
【问题描述】:

我在尝试使用 Laravel 中的 StoreAs 方法来存储尚未由 html 文件处理程序附加并且已通过类型为“文件”的请求发送的图像时已经走到了尽头。

我使用croppie创建了一个裁剪图像:https://foliotek.github.io/Croppie/

但是,croppie 似乎并没有为我提供一个简单的解决方案来将裁剪的图像附加到标准的 html 文件处理程序。所以我决定将图像信息和图像名称附加到一个隐藏的文件元素,并将它与我的发布请求一起发送到我的 laravel 实例。但是,我现在的问题是我想使用 StoreAs 方法,因为它允许我将我的图像附加到一个特定的 url,我可以在检索大量图像时发现它非常有用。

Laravel 中的 StoreAs() 方法显然只允许使用 UploadedFile 类型的对象,它基于 Symfony\Component\HttpFoundation\File\UploadedFile 类。当在 html 中使用文件处理程序时,这个 UploadedFile 对象显然会与文件一起自动发送。

我有一个与此类似的 base64 编码图像:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAgAElEQVR4nOy9d3RUZ5ruuyvnnJNyzpEgcg4mO+e23U7t3Hl6wu2ZOTPn3Dtn8unTTTAYMqZbDAYCZRBAPRIkkpS 和图像名称。

我发现我可以自己在 Laravel 中创建 UploadedFile 对象,但我很难理解如何创建这个 UploadedFile,然后使用 StoreAs() 方法将其链接到生成的 url。

我在这里找到了这个链接:Laravel - file path to UploadedFile instance 还有这个:https://gist.github.com/m241802/0b5d0a98318304ff08cf

但是我仍然没有完全理解如何从我拥有的图像和图像名称中创建一个 UploadedFile 对象。

有没有人知道如何做到这一点?甚至可以为我的问题提出一个更优雅的解决方案?也许有人有更好的解决方案,在使用croppie库后如何在发布请求中发送文件对象?

提前感谢您的帮助!

【问题讨论】:

  • 您将无法使用UploadedFile,因为您提到的内容是base64。您可以做的是使用base64_decode 解码内容,然后使用file_put_contents 手动保存文件
  • @Ali 感谢您的回复,是否可以将 StoreAs() 方法与 file_put_contents 一起使用?或者我怎样才能使用 file_put_contents 创建一个 url 路径?似乎 file_put_contents 是一个 PHP 方法,而 StoreAs() 是一个专门为此而设计的 laravel 方法。

标签: php image laravel file croppie


【解决方案1】:

试试这个:

$image = $request->input('image'); // your base64 encoded
$image = str_replace('data:image/png;base64,', '', $image);
$image = str_replace(' ', '+', $image);
$imageName = 'test.png';
\File::put(storage_path(). '/' . $imageName, base64_decode($image));

【讨论】:

  • 这让我走上了正轨!最后我使用了 Storage::put() 而不是 File::put,谢谢!
猜你喜欢
  • 2018-08-28
  • 2021-02-09
  • 2018-12-20
  • 1970-01-01
  • 2019-01-21
  • 2020-06-13
  • 1970-01-01
  • 2016-09-18
  • 2018-02-14
相关资源
最近更新 更多