Laravel——图片上传之七牛云

如今的网站图片量越来越大, 所以图片不太可能存到数据库,这样我们就必须采取措施, 比如存到第三方的云储存里,如很火的七牛云...

  1. 首先我们需要一个上传图片的插件,这里举例子的插件叫 html5-fileupload。 首先下载丢到public/vendor/下, 在有页面提交的表单上引用该js文件, 然后创建一个上传图片的控制器 如photoController.php
  •  先看js的代码
var options = {
    type: 'POST',
    url: '填你控制器的地址',
    beforeupload: function() {
        //上传成功之前的行为
    },
    success: function(res) {
        if(res.status == 0) {
            alert(res.msg);
            return false
        }
        $("input[name='image']").val(res.msg);  //将图片表单的值改为成功上传的路径
        $("#img_show").attr("src", res.msg);  //将显示图片的地址改为成功上传图片的路径
        $("#loading").attr('class', 'am-icon-cloud-upload'); //图标  这个随你搞
    }
    error: function() {
        //如果出错怎么办...
    }
}
复制代码
  •  再看控制器里的代码
 public function store(Request $request) {
        if($request->hasFile('image') && $request->image->isValid()) {
            $allow_types = ['image/png', 'image/jpeg', 'image/gif', 'image/jpg'];
            if(!in_array($request->image->getMiMeType(), $allow_types)) {
                return ['status'=> 0, 'msg'=> '图片类型不正确!'];
            }
            if($request->image->getClientSize() > 1024 * 1024 * 3) {
                return ['status'=> 0, 'msg'=>'图片大小不能超过 3M'];
            }
            $path = $request->image->store('public/images');
//            //上传到本地
//            return ['status'=> 1, 'msg'=>'/storage'.str_replace('public', '', $path)];

            //storage_path返回根目录下的storage的绝对路径 里面放的直接丢在后面
            $filePath = storage_path('app/'.$path);

            //上传到七牛
            qiniu_upload($filePath);  //调用的全局函数

            //返回
            return ['status'=> 1, 'msg'=> 'http://ow7pezvrt.bkt.clouddn.com/'.basename($filePath)];

        }
    }
复制代码
  •   控制器后面可能有些不知道的 先来安装七牛 在命令行打
composer require qiniu/php-sdk
复制代码

跑完后, 我们就可以写一个全局函数了,在Http/Helpers下创建一个qiniu.php 内容如下:


// 引入鉴权类
use Qiniu\Auth;
// 引入上传类
use Qiniu\Storage\UploadManager;

function qiniu_upload($filePath) {


// 需要填写你的 Access Key 和 Secret Key
    $accessKey = "edj5WTd-8sURwN4qZD3YE2U9TDL4skSugNO6yevp";
    $secretKey = "4o06NtzXmP0Tu0F8P77Lk4oHSO40zYMae7yXHmUl";
    $bucket = "shop";

// 构建鉴权对象
    $auth = new Auth($accessKey, $secretKey);

// 生成上传 Token
    $token = $auth->uploadToken($bucket);

// 要上传文件的本地路径
//    $filePath = './php-logo.png';

// 上传到七牛后保存的文件名
    $key = basename($filePath);

// 初始化 UploadManager 对象并进行文件的上传。
    $uploadMgr = new UploadManager();

// 调用 UploadManager 的 putFile 方法进行文件的上传。
    $uploadMgr->putFile($token, $key, $filePath);
//删除本地图片
    unlink($filePath);
}
复制代码

然而全局函数可能并没有加载到composer.json里去 我们需要打开composer.json

然后我们重新加载这个 命令行输入

composer dump-autoload
复制代码

这样函数就加载成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值