【问题标题】:How to upload large file > 5MB in laravel 5如何在 laravel 5 中上传大于 5MB 的大文件
【发布时间】:2016-08-04 15:43:33
【问题描述】:

我可以知道如何在 Laravel 5 中上传超过 5Mb 的大文件吗?我正在尝试上传大约 10MB 的图像文件,但它没有上传,我搜索了很多并更新了 php.ini 中的以下设置

post_max_size = 500M;
memory_limit = 500M;
upload_max_filesize = 500M

我已重新启动 Apache 服务器,但仍有问题。 php.ini 或 Laravel 中是否还有其他设置可以上传大文件?请帮忙。

编辑

$image = $request->file('image');

            if($image && $image != '') {

                $extension  = $image->getClientOriginalExtension();
                $imageName = $this->getUniqueName($extension);
                $image->move('gimages/profile_images/', $imageName);
                $profile_image = $imageName;
                $update_user_data['image'] = $profile_image;
            }

非常感谢!

【问题讨论】:

  • 您需要比“它没有上传”更具体。请发布启动上传的表单,以及负责处理上传的代码,并解释究竟是什么不工作。
  • 您收到任何错误吗?
  • 不,当我在“Advanced Rest Client”中打印请求以查看 POST 数据时,即使其他输入字段 @Jerodev 也没有显示任何数据
  • @SachinVairagi 您看到任何帖子数据吗?也可以尝试传递一个文本字段,如果在打印请求对象时看不到这个,那么这可能是与上传相反的重写问题。
  • @JohnDoe 提交大文件时不显示任何post数据,但是提交1MB左右的小文件时,它会打印post数据并成功上传文件。

标签: php laravel file-upload


【解决方案1】:

如果你想上传大文件,你应该使用流。这是执行此操作的代码:

$disk = Storage::disk('s3');
$disk->put($targetFile, fopen($sourceFile, 'r+'));

即使您上传几 GB 的文件,PHP 也只需要几 MB 的 RAM。

来源:https://murze.be/2015/07/upload-large-files-to-s3-using-laravel-5/

有关 Storage 的用法和配置,请参阅 Lrvl5 文档: https://laravel.com/docs/5.0/filesystem

【讨论】:

  • 我不想在 Amazon s3 上上传文件,我只想在我们自己的服务器上上传。
  • s3 是文件系统中的配置名称。你可以随意调用它。请参阅 Storage 文档,了解如何配置私有 FTP 服务器并将其与 Storage 无缝结合使用。
【解决方案2】:

我可能会迟到。

但我认为有人可能需要一种专门将文件流式传输到的方法

本地存储而不是 s3

这是将文件流式传输到本地存储的方法。正如documentation 所说

本地司机

使用本地驱动时,注意所有文件操作都是 相对于配置文件中定义的根目录。经过 默认情况下,此值设置为 storage/app 目录。所以, 以下方法会将文件存储在 storage/app/file.txt 中:

Storage::disk('local')->put('file.txt', 'Contents');

所以要流式传输到本地而不是像答案中提到的@koalaok那样使用s3,您可以使用local。所以会是这样的

$disk = Storage::disk('local');
$disk->put($targetFile, fopen($sourceFile, 'r+'));

【讨论】:

【解决方案3】:

在 Laravel 新版本 (+5.3) 中有一个“自动流式传输”功能。你可以这样使用:

use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;

// Automatically generate a unique ID for file name...
Storage::putFile('photos', new File('/path/to/photo'));

// Manually specify a file name...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');

有关更多信息,请关注此文档并搜索“自动流式传输”:https://laravel.com/docs/5.6/filesystem

【讨论】:

  • 如果文件来自$request->file,我们是否必须使用new File()
  • @Michał 是的,如果你这样设置,它将保存在你想要的位置
  • 当然,但是如果我们有$request,我们可以只使用Storage::putFile('photos', $request->file); 而不是使用new File('/path/to/photo') 并获得“自动流式传输”吗?
  • 编辑:两者都试了,看不出区别,还是很慢:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2014-10-06
  • 2021-09-15
相关资源
最近更新 更多