Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第1张图片
image

生成签名

第一步:点击下载代码

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第2张图片
image

第二步

创建bucket


Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第3张图片
image.png

第三步设置跨域

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第4张图片
image.png

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第5张图片
image.png

第四步:打开/Application/Common/Conf/config.php,配置文件参数到阿里云取出

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第6张图片
image.png
Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第7张图片
image.png

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第8张图片
image.png

代码


'ALIOSS_CONFIG'=> array(

'KEY_ID'=>'',//阿里云oss key_id

'KEY_SECRET'=>'',//阿里云oss key_secret

'END_POINT'=>'',//阿里云oss endpoint

'BUCKET'=>'',// bucken名称

),

第五步:将文件粘贴到thinkphp目录下面

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第9张图片
image.png

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第10张图片
image.png

将下载好的代码找到/php/get.php,里面有个gmt_iso8601函数,将其代码复制到/Application/Common/Common/function.php

function gmt_iso8601($time) {
    $dtStr = date("c", $time);
    $mydatetime = new DateTime($dtStr);
    $expiration = $mydatetime->format(DateTime::ISO8601);
    $pos = strpos($expiration, '+');
    $expiration = substr($expiration, 0, $pos);
    return $expiration."Z";
}

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第11张图片
image.png

创建一个控制器文件,创建一个方法,将/php/get.php中除了gmt_iso8601函数的其他代码粘贴进去
Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第12张图片
image.png

将其内部参数修改成自己的,将变量$id设成AccessKeyId,$key设置成AccessKeySecret,$host设置成 bucket+endpoint。

回调

第一步:

将上述生成签名的$callback_body内的参数修改一下,callbackUlr设置成自己写的一个回调方法路径,callbackHost写成域名(可以不写),filename设置自己想要oss返回给我们的参数,有文件名称,大小,宽和高,callbackBodyType设置请求头

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第13张图片
image.png

第二步:

下载回调函数的demo

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第14张图片
image.png

第三步:

将下载好的callback.php文件内容粘贴到你创建好的回调方法内

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第15张图片
image.png

阿里云oss权限设置成私有后如何访问

Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3)_第16张图片
image.png

第一步:将一下代码复制到/Application/Common/Common/function.php下面

阿里云原文链接在此

/**
 * 生成GetObject的签名url,主要用于私有权限下的读访问控制
 *
 * @param $ossClient OssClient OSSClient实例
 * @param $bucket string bucket名称
 * @return null
 */
function getSignedUrlForGettingObject($object)
{
    import('Vendor.oss_php_sdk_20140625.lib.requestcore.requestcore');
    $ossClient = new_oss();
    $bucket = C('ALIOSS_CONFIG.BUCKET');
//    $object = "test/test-signature-test-upload-and-download.txt";
    $timeout = 3600; // URL的有效期是3600秒
    try{
        $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    $url = __FUNCTION__ . ": signedUrl: " . $signedUrl. "\n";
    return $url;
    print(__FUNCTION__ . ": signedUrl: " . $signedUrl. "\n");
    /**
     * 可以类似的代码来访问签名的URL,也可以输入到浏览器中去访问
     */
    $request = new RequestCore($signedUrl);
    $request->set_method('GET');
    $request->send_request();
    $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
    if ($res->isOK()) {
        print(__FUNCTION__ . ": OK" . "\n");
    } else {
        print(__FUNCTION__ . ": FAILED" . "\n");
    };

第二步:将回调函数返回的filename传入此函数,生成签名后的url即可在浏览器访问

image.png

你可能感兴趣的:(Web端直传服务端签名直传并设置上传回调(ThinkPHP3.2.3))