【问题标题】:Laravel - Passing a PHP resource to Storage::putLaravel - 将 PHP 资源传递给 Storage::put
【发布时间】:2016-07-28 18:43:23
【问题描述】:
Laravel 文档 (https://laravel.com/docs/5.2/filesystem#storing-files) 声明:
存储文件
put 方法可用于在磁盘上存储文件。您还可以将 PHP 资源传递给 put 方法,该方法将使用 Flysystem 的底层流支持。处理大文件时强烈建议使用流:
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);
我希望保存一个大于我的 php 内存限制 (512MB) 的文件,所以当我这样做时,我得到一个内存错误:
Local.php 第 128 行中的 FatalErrorException:允许的内存大小为 536870912 字节已用尽(尝试分配 377028088 字节)。
如何使用文档中指示的流式传输功能?如何从文件路径转到“PHP 资源”?
【问题讨论】:
标签:
php
laravel
flysystem
【解决方案1】:
PHP 不允许您上传该大小的文件。文档中指出的资源是这种PHP resource
这是一个使用Intervention 从外部图像 URL 创建图像的简单示例。 Intervention 库使用 GD 库,位于 PHP 资源列表下。
$image = Image::make('Your Extenal URL')->stream();
Storage::put('image_name.jpg', $image->getContents());
在您的情况下,这是上传文件的示例代码。
$file = Request::file('file_field');
Storage::put($file->getClientOriginalName(), File::get($file));