zoukankan      html  css  js  c++  java
  • 七牛php-sdk使用-文件上传

    使用七牛进行文件上传可以有多种方式:

    1. 直接form表单上传,需要自己按照文档做配置
    2. 使用七牛jssdk,部署较简单,大文件分片上传
    3. php-sdk后台上传

    首先,所有的上传方法以及所有的跟七牛接口相关的操作,基本都离不开token,所以首先必须先获取token。

    下载七牛的php-sdk, 放到项目目录,有一点提一下,七牛的php-sdk并没有加入命名空间,所以要应用到自己的框架中,需要更添加一下命名空间。

    然后,需要获取token需要先获取auth:

    note:accessKey与secretKey需要自己注册并在七牛开发者中心获取

    public function getAuth()
    {
        $model = new ackendmodelsQiniuKey();
        $key = $model->getKey();
        $accessKey = $key['accessKey'];
        $secretKey = $key['secretKey'];
        //安全起见,accessKey 与 secretKey 存放数据库
        $auth = new Auth($accessKey, $secretKey);
        return $auth;
    }
    

    然后获取上传的uploadToken:

    public function getUptoken($bucketName)
    {
        header('Access-Control-Allow-Origin:*');
        $bucket = $bucketName; //七牛bucketname
        $auth = $this->getAuth();
        $upToken = $auth->uploadToken($bucket);
        return $upToken;
    }
    

    如果以form表单的方式上传,只要action指定为http://upload.qiniu.com/,以及包含name为token的input 表单,对于资源文件的别名,可以在调用uploadToken的时候,指定第二参数key;以及上传的结果,可以指定第三个参数policy中,也就是上传策略中指定callbackUrl,上传成功,七牛会请求指定的回调地址,返回信息包括code与hash就是上传文件的文件名(你指定的key或者七牛生成的唯一的hash值)。

    使用php-sdk上传

    这种上传方式,适用于图片已经上传到了我们的服务器的情况,因为上传需要指定文件的路径。一般情况,key值会指定为时间戳加4位随机数的形式来命名。

    需要用到sdk中的UploadManager这个类

    /**
     * 本地文件上传七牛  wyq add  type 方便直接打开文件
     * @param  $filePath 本地文件的路径(真实的物理路径)
     */
    public function uploadToQiniu($filePath,$type="")
    {
        /* @param $upToken    上传凭证
         * @param $key        上传文件名
         * @param $filePath   上传文件的路径
         * @param $params     自定义变量,规格参考
         *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
         * @param $mime       上传数据的mimeType
         * @param $checkCrc   是否校验crc32
         */
        $uploadManager = new UploadManager;
        $upToken = $this->getUptoken($bucketName);
        
        if(empty($type)){
            $key = time().rand(1000,9999);
        }else{
            $key = time().rand(1000,9999).".".$type;
        }
        $mimeType = $this->getMimeType($filePath);
    
        $res = $uploadManager->putFile($upToken,$key,$filePath,null,$mimeType);
    
        if($res[0] != null){
            $url = 'http://'.$this->qiniu_image_domain.'/'.$key;//七牛文件的链接(前提是公开bucket)
            return $url;
        }else{
            return false;
        }
    }
    

    获取文件minetype的代码也放上来:

    /**
     * 获取一个文件mime-Type
     * @param   $filePath 文件路径
     */
    public function getMimeType($filePath)
    {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $filePath);
        finfo_close($finfo);
        return $mime;
    }
    

    上传成功就可以将返回的url进行保存或者显示了。如果返回的false,,就需要debug一下,查看$res的错误信息。

    使用js-sdk上传

    有了jssdk就没必要再使用第一种表单的上传方式了。首先下载jssdk

    然后将资源文件放到我们的js资源目录下,先进行css与js文件的引入。因为这个上传组件是基于plupload做的,所以要引入的文件包括:

    main.css
    highlight.css
    //plupload需要的js
    plupload.full.min.js
    ui.js
    //sdk
    qiniu.js
    //多文件上传
    multiple.js
    //单文件上传
    main.js
    

    引入完之后,需要做的一点配置就是,打开main.js,有一个uptoken_url项,也就是如同上面的方式一样,上传需要使用uploadToken,所以我们在这里指定一个url地址,sdk会自动请求这个地址,我们在这个地址中做的操作就是返回token,echo json_encode(['uptoken' => 'token字符串']);

    如果要自定义样式,以及上传文件过程的效果,需要阅读源码来更改,这个sdk没有提供样式以及状态修改的选项。

    另外的一种上传方式,之前有介绍过,就是基于uploadify(也是一个上传文件用的js插件)与七牛的结合使用,可以点击前往查看

    更多用法,欢迎留言讨论。

  • 相关阅读:
    EXCEL创建批量的测试数据(sql insert语句为例)-CONCATENATE函数
    MySQL- exists的用法介绍(返回值True或False)-not exists反过来查询的应用
    MySql 中 case when then else end 的用法
    MySQL-FIND_IN_SET()函数
    MySQL函数-GROUP_CONCAT
    机器学习实战笔记-K近邻算法3(手写识别系统)
    机器学习实战笔记-K近邻算法2(改进约会网站的配对效果)
    机器学习实战笔记-K近邻算法1(分类动作片与爱情片)
    easyUi可编辑表格
    Chrome+ss FQ配置
  • 原文地址:https://www.cnblogs.com/skyfynn/p/6565930.html
Copyright © 2011-2022 走看看