You need to enable JavaScript to run this app.
导航

普通下载(PHP SDK)

最近更新时间2024.02.04 18:30:59

首次发布时间2022.11.16 14:58:44

普通下载同样使用 Psr\Http\Message\StreamInterface 作为对象的数据源,本文介绍普通下载的示例代码。

示例代码

您可以通过 TosClient->getObject 获取下载对象的数据源,示例代码如下:

<?php

// 假设使用 composer 安装
require_once __DIR__ . '/vendor/autoload.php';

use Tos\TosClient;
use Tos\Exception\TosClientException;
use Tos\Exception\TosServerException;
use Tos\Model\GetObjectInput;
use GuzzleHttp\Psr7\Utils;

$output = null;
$file = null;
try {
    $client = new TosClient([
        'region' => 'your region',
        'endpoint' => 'your endpoint',
        // 从环境变量中获取访问密钥
        'ak' => getenv('TOS_ACCESS_KEY'),
        'sk' => getenv('TOS_SECRET_KEY'),
    ]);
    
    // 下载到内存
    $input = new GetObjectInput('bucket-test',  'key-test');
    $output = $client->getObject($input);
    echo $output->getRequestId() . PHP_EOL;
    // 获取对象长度
    echo $output->getContentLength() . PHP_EOL;
    // 获取对象 Content-Type
    echo $output->getContentType() . PHP_EOL;
    // 获取对象 ETag
    echo $output->getETag() . PHP_EOL;
    // 获取对象 StorageClass
    echo $output->getStorageClass() . PHP_EOL;
    // 获取对象 CRC64
    echo $output->getHashCrc64ecma() . PHP_EOL;
    // 获取对象用户自定义元数据
    foreach ($output->getMeta() as $k => $v) {
        echo $k . '=' . $v . PHP_EOL;
    }
    // 直接读取字符串
    echo $output->getContent()->getContents() . PHP_EOL;
    $output->getContent()->close();
    
    // 下载到本地文件
    $file = fopen('local_file_path', 'w');
    $input = new GetObjectInput('bucket-test',  'key-test');
    $output = $client->getObject($input);
    echo $output->getRequestId() . PHP_EOL;
    // 流式写入到本地文件
    Utils::copyToStream(Utils::streamFor($output->getContent()), Utils::streamFor($file));
    
} catch (TosClientException $ex) {
    echo $ex->getMessage() . PHP_EOL;
} catch (TosServerException $ex) {
    echo $ex->getRequestId() . PHP_EOL;
    echo $ex->getStatusCode() . PHP_EOL;
    echo $ex->getErrorCode() . PHP_EOL;
} finally {
    if($output){
        $output->getContent()->close();
    }
    if (is_resource($file)) {
        fclose($file);
    }
}