由于服务器的资源是有限的,我们为了节省服务器的资源,通常会把一些图片文件放到第三方服务器中。比如:七牛云、阿里云、腾讯云等等。这里就记录一下怎么在 Laravel 中将图片上传到七牛云上。


在这里我们选择了 overtrue/laravel-filesystem-qiniu 扩展包,在项目根目录运行:

composer require overtrue/laravel-filesystem-qiniu

安装完成之后,我们需要在 config/app.php 中注册 OvertrueLaravelFilesystemQiniuQiniuStorageServiceProvider:

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

然后将 config/filesystems.php 文件修改为:

'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=xxxxxxxxxxxxxxxx
QINIU_SECRET_KEY=xxxxxxxxxxxxxxxx
QINIU_BUCKET=xxx
QINIU_DOMAIN=xxx

接下来我们就可以进行使用啦。由于我们不止一处地方用到上传图片,我们可以把上传图片写入到 自定义的辅助函数文件 中。

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];
           }
       }
   }
}

本人踩坑:由于使用七牛云之前的AccessKey/SecretKey密钥,一直上传不成功,后来新建了一个AccessKey/SecretKey密钥才解决问题.
本文链接:https://learnku.com/laravel/t/35581


本文由 来鹏飞 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论