腾讯云对象存储服务(cos)之PHP实践

云对象存储服务, BAT都有其业务, 本文选择腾讯是因为腾讯有每月免费流量, 而阿里和百度都是需要先付费后使用, 另外新兴的像七牛云存储, 也是很不错的解决方案.
贴代码

<?php
/**
 * Simple Tencent COS SDK
 * 2016/05/09
 * Author: hldh214 <hldh214@gmail.com>
 */

// 配置项 start
$appid = '';
$bucket_name = '';
$dir_name = '';
$secretID = '';
$secretKey = '';
// 配置项 end

// 需要存储的资源url, 这里用百度logo来做演示
$pic_url = 'http://www.baidu.com/img/logo.gif';
// 获取文件名
$filename = end(explode('/', $pic_url));
// 构造上传url
$upload_url = "web.file.myqcloud.com/files/v1/$appid/$bucket_name/$dir_name/$filename";
// 设置过期时间
$exp = time() + 3600;
// 构造鉴权key
$sign = "a=$appid&b=$bucket_name&k=$secretID&e=$exp&t=" . time() . '&r=' . rand() . "&f=/$appid/$bucket_name/$dir_name/$filename";
$sign = base64_encode(hash_hmac('SHA1', $sign, $secretKey, true) . $sign);
// 构造post数据
$post_data = [
    'op' => 'upload',
    'filecontent' => file_get_contents($pic_url),  // baidu logo
];
// 设置post的headers, 加入鉴权key
$header = [
    'Content-Type: multipart/form-data',
    'Authorization: ' . $sign,
];
// post
$ch = curl_init($upload_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
if (isset($res['data']['access_url'])) {
    // 成功, 输出文件url
    echo $res['data']['access_url'];
} else {
    // 失败
    echo $res;
}
### 如何在 PHP 中使用腾讯云对象存储 COS #### 初始化 SDK 客户端 为了能够操作腾讯云对象存储服务 (COS),首先需要初始化 `CosClient` 对象。这可以通过引入腾讯云提供的 PHP SDK 来完成。 ```php require 'vendor/autoload.php'; use Qcloud\Cos\Client; $cosClient = new Client([ 'region' => getenv('REGION'), 'credentials'=> [ 'secretId' => getenv('SECRET_ID'), 'secretKey' => getenv('SECRET_KEY') ], ]); ``` 此部分代码展示了如何创建一个新的客户端实例来连接到指定区域的服务[^1]。 #### 获取文件的下载 URL 当希望提供给用户一个可以直接访问资源的链接时,可以利用 `getObjectUrl()` 方法生成带有时效性的预签名 URL: ```php $bucketName = "example-bucket-125000000"; $key = "path/to/myfile.jpg"; try { $presignedUrl = $cosClient->getObjectUrl($bucketName, $key, "+1 hours"); echo "Presigned URL: {$presignedUrl}\n"; } catch (\Exception $e) { die("Error: " . $e->getMessage()); } ``` 上述脚本会输出带有有效期的一小时内的文件直链地址[^3]。 #### 下载单个文件至本地服务器 对于想要把远端存放在 COS 上面的数据保存下来的情况,则可采用同步方式调用 `GetObject` 接口实现这一需求: ```php $result = $cosClient->getObject([ 'Bucket' => $bucketName, 'Key' => $key, 'SaveAs' => '/tmp/' . basename($key), ]); if ($result["@metadata"]["statusCode"] === 200){ printf("File downloaded successfully.\n"); }else{ print_r($result); } ``` 这段程序将会尝试从云端拉取特定键名所指向的内容并将其储存在临时目录下[^2]。 #### 配置本地磁盘适配器 考虑到某些场景可能涉及到将数据先写入本地再上传或是相反的过程,在 ThinkPHP 框架内可通过修改配置文件设定默认使用的驱动以及具体参数设置如下所示: ```php return [ 'default' => env('FILESYSTEM_DRIVER', 'local'), 'disks' => [ 'local' => [ 'type' => 'local', 'root' => app()->getRuntimePath(), ], // Other disk configurations... ] ]; ``` 这里定义了一个名为 `local` 的磁盘用于处理相对简单的读写请求,并指定了根路径作为工作区[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值