6. 文件下载

NOS PHP SDK提供了丰富的文件下载接口,用户可以通过以下方式从NOS获取文件:

  • 下载文件到内存
  • 下载到本地文件
  • 分段下载
  • 条件下载

6.1. 下载文件到内存

以下源代码实现下载文件到内存中:

<?php
/**
 * 获取object的内容
 *
 * @param NosClient $nosClient NosClient实例
 * @param string $bucket 桶名称
 * @return null
 */
function getObject($nosClient, $bucket)
{
    $object = "nos-php-sdk-test/upload-test-object-name.txt";
    try{
        $content = $nosClient->getObject($bucket, $object);
    } catch(NosException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}

6.2. 下载文件到本地文件

以下源代码实现将NOS文件下载到本地文件:

<?php
/**
 * get_object_to_local_file
 *
 * 获取object
 * 将object下载到指定的文件
 *
 * @param NosClient $nosClient NosClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function getObjectToLocalFile($nosClient, $bucket)
{
    $object = "nos-php-sdk-test/download-test-object-name.txt";
    $localfile = "download-test-object-name.txt";
    $options = array(
        NosClient::NOS_FILE_DOWNLOAD => $localfile,
    );
    try{
        $nosClient->getObject($bucket, $object, $options);
    } catch(NosException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
}

6.3. 范围下载

如果存储在NOS中的文件较大,并且您只需要其中的一部分内容,您可以使用范围下载,下载指定范围的数据,如果指定的下载范围为”0-100”,则返回结果为第0字节到第100字节的数据,返回的数据包含第100字节,即[0,100],如果指定的范围无效则下载整个文件,以下源代码获取[0,100]字节的内容:

<?php
/**
 * 获取object的内容
 *
 * @param NosClient $nosClient NosClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function getObject($nosClient, $bucket)
{
    $object = "nos-php-sdk-test/upload-test-object-name.txt";
    try{
        $options = array(NosClient::NOS_RANGE => '0-100');
        $content = $nosClient->getObject($bucket, $object, $options);
    } catch(NosException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}

Attention

  1. 下载内容也可以存储到文件中
  2. 注意下载的区间为闭区间

6.4. 条件下载

下载文件时,可以指定限定条件,满足限定条件时下载,不满足时报错,不下载文件。可以使用的限定条件如下:

参数 说明 NosClient对应值
If-Modified-Since 如果指定的时间早于实际修改时间,则正常传送。否则返回错误 NosClient::NOS_IF_MODIFIED_SINCE
<?php
/**
 * 如果文件在指定的时间之后修改过,则下载文件
 *
 * @param NosClient $nosClient NosClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function getObject($nosClient, $bucket)
{
    $object = "nos-php-sdk-test/upload-test-object-name.txt";
    try{
        $options = array(
            NosClient::NOS_HEADERS => array(
                NosClient::NOS_IF_MODIFIED_SINCE => "Fri, 13 Nov 2016 14:47:53 GMT"),
    );
        $content = $nosClient->getObject($bucket, $object, $options);
    } catch(NosException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}

Attention

  1. 下载内容也可以存储到文件中