柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

laravel-admin1.7使用large-file-upload大文件上传插件的完整过程

2019-10-03 admin laravel  2330

本扩展包是基于peinhu的AetherUpload-Laravel针对laravel-admin开发的大文件上传工具, 直接用于Form组件。当前版本为Laravel 5.5, 经测试,可兼容Laravel6.03,使用经过如下:

1. 安装:

composer require dianwoung/large-file-upload

2. 发布AetherUpload-laravel的静态资源:

php artisan aetherupload:publish

3. 上传文件配置信息在config/aetherupload.php文件中修改(详细信息请参考说明文档)

4. 发布本扩展包的静态资源:

php artisan vendor:publish --tag=large-file-upload

5. 注册进laravel-admin,在app/Admin/bootstrap.php中添加以下代码:

Encore\Admin\Form::extend('largefile', \Encore\LargeFileUpload\LargeFileField::class);

6 .在控制器中直接调用就可以了:

$form->largefile('ColumnName', 'LabelName');

在实际使用中发现问题:

首先是上传路径是在config/aetherupload.php配置文件中修改,但都位于storage/app/目录下,而laravel默认能访问的是public根目录。解决办法:

1. 修改aetherupload.php中的root_dir为public,再执行命令生成相关目录,并给予权限:

php artisan aetherupload:groups

2. 创建软链接,在根目录下执行:

php artisan storage:link

此时 public 文件夹下多了一个 storage 文件夹,上传文件,返回的文件地址是这样的

file_201910_889cc0e3663efb2a46dd8564323740d7.mp4

我们需要在model中定义访问器,将地址转换成这样的:

https://blog.dzbfsj.com/storage/file/201910/889cc0e3663efb2a46dd8564323740d7.mp4

在model中加入以下代码:

    public function geturlAttribute($value)
    {
        return url('storage/'.str_replace('_','/',$value));//替换_为/并用url生成完整网址
    }

测试使用正常。

2019.10.21晚上查看源码,发现另一种方法修改:

搜索SavedPathResolver.php文件,直接修改源码:

namespace AetherUpload;
class SavedPathResolver
{
    public static function encode($group, $groupSubDir, $name)
    {
        return $group . '_' . $groupSubDir . '_' . $name;
    }
    public static function decode($savedPath)
    {
        list($group, $groupSubDir, $name) = explode('_', $savedPath);
        return (object)[
            'group'        => $group,
            'groupSubDir'  => $groupSubDir,
            'resourceName' => $name,
        ];
    }
}

其它修改:

一是头文件存储使用redis,以加快读写速度,先修改刚才的配置文件:

'header_storage_disk' => 'redis',

在config/filesystems.php中添加以下配置:

    'disks' => [
        ...
       'redis' => [
         'driver' => 'redis',
         'disable_asserts'=>true,
      ],
       ...
   ]

二是启用秒传,修改刚才的配置文件:

'instant_completion' => true,

但使用中发现,上传报错,原因暂时未知。

原因已找到,原来是不支持laravel6.0以上版本,换5.8正常。查看redis key,没有aetherupload_resource这个key,而laravel5.8确有。通过全新安装的方式比较发现的。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!