由于服务器的资源是有限的,我们为了节省服务器的资源,通常会把一些图片文件放到第三方服务器中。比如:七牛云、阿里云、腾讯云等等。这里就记录一下怎么在 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
还不快抢沙发