Laravel8.x使用overtrue/laravel-filesystem-qiniu上传图片到七牛云

作者: 温新

分类: 【Laravel】

阅读: 2760

时间: 2021-07-25 16:59:40

作者:温新

时间:2021-07-26

hi,我是温新,一名PHPer

此篇文章使用Laravel8.x上传文件(图片)到七年牛。之前是有记录过基于另外一个第三方扩展包的用法,详情可以参考 Laravel6.x上传图片到七牛云 这篇文章。

Laravel8.x将使用overtrue/laravel-filesystem-qiniu这个扩展来记录上传图片到七牛云。从github来看,这个包很长时间没有更新。我是基于Laravel8.x来使用,目前没有发现问题。

准备工作

1)准备好七牛云账号;

2)购买好对象存储服务;

3)创建对象窗口空间;

4)域名绑定,也可以使用临时提供的。我创建的是域名绑定,访问图片时,路径将会是使用我的域名。

安装overtrue/laravel-filesystem-qinniu

第一步:安装

$ composer require "overtrue/laravel-filesystem-qiniu" 

第二步:配置

文件位置:config/app.php

'providers' => [
    // Other service providers...
    Overtrue\LaravelFilesystem\Qiniu\QiniuStorageServiceProvider::class,
],

文件位置:config/filesystems.php

<?php

return [
   'disks' => [
        //...
        'qiniu' => [
           'driver'     => 'qiniu',
           'access_key' => env('QINIU_ACCESS_KEY', 'xxxxxxxxxxxxxxxx'),
           'secret_key' => env('QINIU_SECRET_KEY', 'xxxxxxxxxxxxxxxx'),
           'bucket'     => env('QINIU_BUCKET', 'test'),
           'domain'     => env('QINIU_DOMAIN', 'xxx.clouddn.com'), // or host: https://xxxx.clouddn.com
        ],
        //...
    ]
];

上传图片到七牛云

注意:这一步我是在项目中操作的,因此本地并未实际测试,但操作都是一样的。

第一步:配置七牛云信息

文件:env

QINIU_ACCESS_KEY=key
QINIU_SECRET_KEY=secket
QINIU_BUCKET=七牛对象存空间名
# 注意,必须携带 http://或https://
QINIU_DOMAIN=https://www.ziruchu.com

第二步:配置路由

文件位置:routes/web.php

Route::post('art/upload','ArticleController@upload');

第三步:控制器方法

use Illuminate\Support\Facades\Storage;

// 图片上传
public function upload(Request $request)
{
    if ($request->isMethod('POST')) {
        // 判断有文件上传且文件上传成功
        if ($request->hasFile('file') && $request->file('file')->isValid()) {
            // 获取上传文件
            $file = $request->file('file');
            // 获取文件后缀
            $ext  = $file->getClientOriginalExtension();
            // 获取上传文件大小
            $size = $file->getSize();

            // 允许文件上传格式
            $allowExt    = ['jpg','jpeg','gif','png'];
            // 允许文件上传大小
            $allowSize   = 1024 * 1024;
            // 新文件名
            $newFileName = date('Ymd') . rand(100000, 999999) . '.' . $ext;

            if (!in_array($ext, $allowExt)) {
                return ['code' => 400, 'msg' => '非法文件上传'];
            }

            if ($size > $allowSize) {
                return ['code' => 401, 'msg' => '上传文件过大'];
            }

            // 将图片上传到七牛云
            $result = Storage::disk('qiniu')->writeStream($newFileName,fopen($file->getRealPath(),'r'));

            if ($result) {
                return ['code' => 200, 'msg' => '文件上传成功', 'filePath' => $newFileName];
            }
        }
    }
}

这段上传代码会很熟悉,Laravel学习笔记基础系列--(十一)Laravel上传文件 这篇文章就是,几乎可以直接拿来就用。

第四步:前端界面使用

文件:edit.blade.php

<div class="layui-upload-list">
    <img class="layui-upload-img" src="{{env('QINIU_DOMAIN') . '/'.$art->thumb}}" id="demo1" style="width: 150px;float: left;margin-left: 190px;margin-top: -50px;">
    <p id="demoText"></p>
</div>

基础操作到这里就结束了。以后要用到了,直接过来拿,岂不是很方便!

我是温新

每天进步一点点,就一点点

请登录后再评论