如何使用storeas方法()在laravel内部存储base64编码图像?

问题描述:

我在尝试使用Laravel中的StoreAs方法来存储未被HTML文件处理程序附加的图像,并且已通过类型为“File”的请求发送了该图像。如何使用storeas方法()在laravel内部存储base64编码图像?

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

然而,croppie似乎并没有给我提供一个简单的解决方案,以裁剪后的图像连接到标准的HTML文件处理器。所以我决定将图像信息和图像名称附加到隐藏的文件元素,并将其与我的发布请求一起发送到我的laravel实例。不过,我现在的问题是我想使用StoreAs方法,因为它允许我将图像附加到特定的URL,在检索大量图像时我可以检索到这些特定的URL,这对我来说非常有用。

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

我有一个类似的base64编码图像:数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAgAElEQVR4nOy9d3RUZ5ruuyvnnJNyzpEgcg4mO + e23U7t3Hl6wu2ZOTPn3Dtn8unTTTAYMGBjbDAYCZRBApRIkkpSqZ 和图像名。

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

我发现这个链接在这里:Laravel - file path to UploadedFile instance 而这一次在这里:https://gist.github.com/m241802/0b5d0a98318304ff08cf

可是我还是没有完全得到我怎么能出去我有图像和图像名称的创建UploadedFile的对象。

有没有人有一个想法如何做到这一点?或甚至可以建议一个更优雅的解决方案,我的问题??也许有人有更好的解决方案,可以在使用croppie库后如何发送文件对象的请求?

在此先感谢您的帮助!

+0

您将无法使用'UploadedFile'为内容的base64如你所提到的。你可以做的是使用'base64_decode'解码内容,然后使用'file_put_contents'手动保存文件 – Ali

+0

@Ali感谢您的回复,是否有可能使用storeAs()方法与file_put_contents?或者我怎样才能使用file_put_contents创建一个url路径?似乎file_put_contents是一个PHP方法,而StoreAs()是专门为此制作的laravel方法。 – Benny

试试这个:

$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)); 
+0

这让我走上了正轨!最后我用Storage :: put()而不是File :: put,谢谢! – Benny