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插件)与七牛的结合使用,可以点击前往查看

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

  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/skyfynn/p/6565930.html
Copyright © 2011-2022 走看看