Polyscope - The agent-first dev environment for Laravel

Qiniu Laravel Storage

zgldh/qiniu-laravel-storage image

Qiniu Laravel Storage stats

Downloads
322.1K
Stars
519
Open Issues
8
Forks
79

View on GitHub →

Qiniu Resource (Cloud) Storage SDK for Laravel 5/6/7/8/9

Qiniu 云储存 Laravel 5/6/7/8/9 Storage版

基于 https://github.com/qiniu/php-sdk 开发

符合Laravel 5/6/7/8/9 的Storage用法。

注意

 从七牛获取到的putTime时间戳,是以 100纳秒 为单位的。

参考 https://developer.qiniu.com/kodo/api/1308/stat https://developer.qiniu.com/kodo/api/1284/list

 PHP 可以用 Carbon Carbon::createFromTimestampMs($putTime/10000) 来保证最大精度  

JavaScript 可以用 moment moment(putTime/10000) 来保证最大精度  

更新

v9.0 支持 Laravel 9

v0.10 支持“公开空间”的 CDN 时间戳防盗链

v0.9 兼容 Laravel 5.5 的自动包安装功能

v0.8

  1. 修正了getUrl
  2. 修正了最新的 Qiniu API 适配

v0.7

  1. 增加了 withUploadToken, lastReturn 等命令。
  2. 修正了代码内的一些typo

v0.6 增加了fetch, qetag 命令。

v0.5 增加了QiniuUrl来更方便的设置文件 URL 参数。

v0.3 增加了对PIPE以及回调地址参数的配置。 感谢abcsun提供的灵感。

v0.2 提供了对多域名的支持。这是为了配合七牛的默认域名、HTTPS域名和自定义域名而添加的功能。

安装

  • composer require zgldh/qiniu-laravel-storage:0.10.3
  • config/app.php 里面的 providers 数组, 加上一行 zgldh\QiniuStorage\QiniuFilesystemServiceProvider::class
  • config/filesystem.php 里面的 disks数组加上:
 
'disks' => [
... ,
'qiniu' => [
'driver' => 'qiniu',
'domains' => [
'default' => 'xxxxx.com1.z0.glb.clouddn.com', //你的七牛域名
'https' => 'dn-yourdomain.qbox.me', //你的HTTPS域名
               'custom'   => 'static.abc.com',               //Useless 没啥用,请直接使用上面的 default 项
],
'access_key'=> '', //AccessKey
'secret_key'=> '', //SecretKey
'bucket' => '', //Bucket名字
'notify_url'=> '', //持久化处理回调地址
'access' => 'public', //空间访问控制 public 或 private
'hotlink_prevention_key' => 'afc89ff8bd2axxxxxxxxxxxxxxbb', // CDN 时间戳防盗链的 key。 设置为 null 则不启用本功能。
// 'hotlink_prevention_key' => 'cbab68a279xxxxxxxxxxab509a', // 同上,备用
],
],
  • 完成

使用

第一种用法

 
$disk = \Storage::disk('qiniu');
$disk->exists('file.jpg'); //文件是否存在
$disk->get('file.jpg'); //获取文件内容
$disk->put('file.jpg',$contents); //上传文件
$disk->put('file.jpg',fopen('path/to/big.jpg','r+')); //分段上传文件。建议大文件>10Mb使用。
$disk->prepend('file.log', 'Prepended Text'); //附加内容到文件开头
$disk->append('file.log', 'Appended Text'); //附加内容到文件结尾
$disk->delete('file.jpg'); //删除文件
$disk->delete(['file1.jpg', 'file2.jpg']);
$disk->copy('old/file1.jpg', 'new/file1.jpg'); //复制文件到新的路径
$disk->move('old/file1.jpg', 'new/file1.jpg'); //移动文件到新的路径
$size = $disk->size('file1.jpg'); //取得文件大小
$time = $disk->lastModified('file1.jpg'); //取得最近修改时间 (UNIX)
$files = $disk->files($directory); //取得目录下所有文件
$files = $disk->allFiles($directory); //这个没实现。。。
$directories = $disk->directories($directory); //这个也没实现。。。
$directories = $disk->allDirectories($directory); //这个也没实现。。。
$disk->makeDirectory($directory); //这个其实没有任何作用
$disk->deleteDirectory($directory); //删除目录,包括目录下所有子文件子目录
$disk->url('a.png'); //返回文件的URL
$disk->url(['path' => 'a.png', 'domainType' => 'default']); //返回文件的URL
 
$disk->getAdapter()->uploadToken(); //获取上传Token
$disk->getAdapter()->uploadToken('file.jpg'); //获取上传Token
 
$disk->getAdapter()->withUploadToken($token); // 使用自定义的 uploadToken 进行上传,
$disk->put('file.jpg',$content); // 则本次的 put 操作,将使用上述的 $token 进行上传。
// 常用于自动触发持久化处理 https://github.com/qiniu/php-sdk/blob/master/examples/upload_and_pfop.php
 
$disk->getAdapter()->downloadUrl('file.jpg'); //获取下载地址
$disk->getAdapter()->downloadUrl('file.jpg')
->setDownload('foo.jpg'); //获取下载地址,文件名为 foo.jpg
$disk->getAdapter()->downloadUrl('file.jpg', 'https'); //获取HTTPS下载地址
$disk->getAdapter()->privateDownloadUrl('file.jpg'); //获取私有bucket下载地址
$disk->getAdapter()->privateDownloadUrl('file.jpg?attname=foo.jpg');
//获取私有bucket下载地址,文件名为 foo.jpg
$disk->getAdapter()->privateDownloadUrl('file.jpg', 'https');//获取私有bucket的HTTPS下载地址
$disk->getAdapter()->privateDownloadUrl('file.jpg',
[
'domain'=>'https',
'expires'=>3600
]); //获取私有bucket的HTTPS下载地址。超时 3600 秒。
$disk->getAdapter()->avInfo('file.mp3'); //获取多媒体文件信息
$disk->getAdapter()->imageInfo('file.jpg'); //获取图片信息
$disk->getAdapter()->imageExif('file.jpg'); //获取图片EXIF信息
$disk->getAdapter()->imagePreviewUrl('file.jpg','imageView2/0/w/100/h/200'); //获取图片预览URL
$disk->getAdapter()->privateImagePreviewUrl('file.jpg','imageView2/0/w/100/h/200'); //获取私有bucket图片预览URL
$disk->getAdapter()->verifyCallback('application/x-www-form-urlencoded', $request->header('Authorization'), 'callback url', $request->getContent());//验证回调内容是否合法
$disk->getAdapter()->persistentFop('file.flv','avthumb/m3u8/segtime/40/vcodec/libx264/s/320x240'); //执行持久化数据处理
$disk->getAdapter()->persistentFop('file.flv','fop','队列名'); //使用私有队列执行持久化数据处理
$disk->getAdapter()->persistentStatus($persistent_fop_id); //查看持久化数据处理的状态。
$disk->getAdapter()->fetch('http://abc.com/foo.jpg', 'bar.jpg'); //调用fetch将 foo.jpg 数据以 bar.jpg 的名字储存起来。
$disk->getAdapter()->qetag(); //得到最后一次执行 put, copy, append 等写入操作后,得到的hash值。详见 https://github.com/qiniu/qetag
$disk->getAdapter()->lastReturn(); //得到最后一次执行 put, copy, append 等写入操作后,得到的返回值。

第二种用法 (就是省略了一个getAdapter)

 
use zgldh\QiniuStorage\QiniuStorage;
 
$disk = QiniuStorage::disk('qiniu');
$disk->exists('file.jpg'); //文件是否存在
$disk->get('file.jpg'); //获取文件内容
$disk->put('file.jpg',$contents); //上传文件
$disk->put('file.jpg',fopen('path/to/big.jpg','r+')); //分段上传文件。建议大文件>10Mb使用。
$disk->prepend('file.log', 'Prepended Text'); //附加内容到文件开头
$disk->append('file.log', 'Appended Text'); //附加内容到文件结尾
$disk->delete('file.jpg'); //删除文件
$disk->delete(['file1.jpg', 'file2.jpg']);
$disk->copy('old/file1.jpg', 'new/file1.jpg'); //复制文件到新的路径
$disk->move('old/file1.jpg', 'new/file1.jpg'); //移动文件到新的路径
$size = $disk->size('file1.jpg'); //取得文件大小
$time = $disk->lastModified('file1.jpg'); //取得最近修改时间 (UNIX)
$files = $disk->files($directory); //取得目录下所有文件
$files = $disk->allFiles($directory); //这个没实现。。。
$directories = $disk->directories($directory); //这个也没实现。。。
$directories = $disk->allDirectories($directory); //这个也没实现。。。
$disk->makeDirectory($directory); //这个其实没有任何作用
$disk->deleteDirectory($directory); //删除目录,包括目录下所有子文件子目录
 
$disk->uploadToken(); //获取上传Token
$disk->uploadToken('file.jpg'); //获取上传Token
 
$disk->withUploadToken($token); // 使用自定义的 uploadToken 进行上传,
$disk->put('file.jpg',$content); // 则本次的 put 操作,将使用上述的 $token 进行上传。
// 常用于自动触发持久化处理 https://github.com/qiniu/php-sdk/blob/master/examples/upload_and_pfop.php
 
$disk->downloadUrl('file.jpg'); //获取下载地址
$disk->downloadUrl('file.jpg')
->setDownload('foo.jpg'); //获取下载地址,文件名为 foo.jpg
$disk->downloadUrl('file.jpg', 'https'); //获取HTTPS下载地址
$disk->privateDownloadUrl('file.jpg'); //获取私有bucket下载地址
$disk->privateDownloadUrl('file.jpg?attname=foo.jpg');
//获取私有bucket下载地址,文件名为 foo.jpg
$disk->privateDownloadUrl('file.jpg', 'https'); //获取私有bucket的HTTPS下载地址
$disk->privateDownloadUrl('file.jpg',
[
'domain'=>'https',
'expires'=>3600
]); //获取私有bucket的HTTPS下载地址。超时 3600 秒。
$disk->avInfo('file.mp3'); //获取多媒体文件信息
$disk->imageInfo('file.jpg'); //获取图片信息
$disk->imageExif('file.jpg'); //获取图片EXIF信息
$disk->imagePreviewUrl('file.jpg','imageView2/0/w/100/h/200'); //获取图片预览URL
$disk->privateImagePreviewUrl('file.jpg','imageView2/0/w/100/h/200'); //获取私有bucket图片预览URL
$disk->verifyCallback('application/x-www-form-urlencoded', $request->header('Authorization'), 'callback url', $request->getContent());//验证回调内容是否合法
$disk->persistentFop('file.flv','avthumb/m3u8/segtime/40/vcodec/libx264/s/320x240'); //执行持久化数据处理
$disk->persistentFop('file.flv','fop','队列名'); //使用私有队列执行持久化数据处理
$disk->persistentStatus($persistent_fop_id); //查看持久化数据处理的状态。
 
$disk->fetch('http://abc.com/foo.jpg', 'bar.jpg'); //调用fetch将 foo.jpg 数据以 bar.jpg 的名字储存起来。
$disk->qetag(); //得到最后一次执行 put, copy, append 等写入操作后,得到的hash值。详见 https://github.com/qiniu/qetag
$disk->lastReturn();//得到最后一次执行 put, copy, append 等写入操作后,得到的返回值。

官方SDK / 手册

zgldh photo

Dreaming a better coding process

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Zgldh Qiniu Laravel Storage Related Articles

Generate, Parse, and Convert Documents in PHP with Paperdoc image

Generate, Parse, and Convert Documents in PHP with Paperdoc

Read article
Ship AI with Laravel: Your AI Agent Has Amnesia. Let's Fix It. image

Ship AI with Laravel: Your AI Agent Has Amnesia. Let's Fix It.

Read article
PestPHP Intellisense in Laravel VS Code Extension v1.7.0 image

PestPHP Intellisense in Laravel VS Code Extension v1.7.0

Read article
Build an AI Chat Agent with Laravel 12, MongoDB Atlas Vector Search, and Voyage AI image

Build an AI Chat Agent with Laravel 12, MongoDB Atlas Vector Search, and Voyage AI

Read article
Tyro Checkpoint: Instant SQLite Snapshots for Laravel Local Development image

Tyro Checkpoint: Instant SQLite Snapshots for Laravel Local Development

Read article
Factory makeMany() Method in Laravel 12.52.0 image

Factory makeMany() Method in Laravel 12.52.0

Read article
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
CodeKudu logo

CodeKudu

Stand-ups, Retrospectives, and 360° Feedback for the entire team. 50% off with code LARAVELNEWS.

CodeKudu
Shift logo

Shift

Running an old Laravel version? Instant, automated Laravel upgrades and code modernization to keep your applications fresh.

Shift
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
The Certification of Competence for Laravel logo

The Certification of Competence for Laravel

A community-driven, proctored assessment across 4 levels designed to validate real-world Laravel knowledge, from Junior to mastery-level Artisan. Official Vue.js, Official Nuxt, Angular, React, JS certifications also available.

The Certification of Competence for Laravel
LoadForge logo

LoadForge

Scalable load testing for web apps & APIs. Simulate real-world traffic and identify breaking points and performance limits with powerful, scalable load tests designed for Laravel.

LoadForge