全部产品
对象存储 OSS

下载文件

更新时间:2017-06-07 13:26:11   分享:   

OSS PHP SDK提供了丰富的文件下载接口,用户可以通过以下方式从OSS下载文件(object):

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

提示:

  • 文件下载的完整代码请参见:GitHub

下载文件到本地文件

以下代码可以下载OSS文件到本地文件:

  1. <?php
  2. /**
  3. * get_object_to_local_file
  4. *
  5. * 获取object
  6. * 将object下载到指定的文件
  7. *
  8. * @param OssClient $ossClient OSSClient实例
  9. * @param string $bucket 存储空间名称
  10. * @return null
  11. */
  12. function getObjectToLocalFile($ossClient, $bucket)
  13. {
  14. $object = "oss-php-sdk-test/download-test-object-name.txt";
  15. $localfile = "download-test-object-name.txt";
  16. $options = array(
  17. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  18. );
  19. try{
  20. $ossClient->getObject($bucket, $object, $options);
  21. } catch(OssException $e) {
  22. printf(__FUNCTION__ . ": FAILED\n");
  23. printf($e->getMessage() . "\n");
  24. return;
  25. }
  26. print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
  27. }

下载文件到内存

以下代码可以下载文件到内存:

  1. <?php
  2. /**
  3. * 获取object的内容
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function getObject($ossClient, $bucket)
  10. {
  11. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12. try{
  13. $content = $ossClient->getObject($bucket, $object);
  14. } catch(OssException $e) {
  15. printf(__FUNCTION__ . ": FAILED\n");
  16. printf($e->getMessage() . "\n");
  17. return;
  18. }
  19. print(__FUNCTION__ . ": OK" . "\n");
  20. }

范围下载

如果OSS文件较大,您只需要其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0 - 100,则返回第0到第100个字节的数据,包括第100个,共101字节的数据,即[0, 100]。如果指定的范围无效,则下载整个文件。

以下代码可以下载文件[0, 100]的内容到内存:

  1. <?php
  2. /**
  3. * 获取object的内容
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function getObject($ossClient, $bucket)
  10. {
  11. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12. try{
  13. $options = array(OssClient::OSS_RANGE => '0-100');
  14. $content = $ossClient->getObject($bucket, $object $options);
  15. } catch(OssException $e) {
  16. printf(__FUNCTION__ . ": FAILED\n");
  17. printf($e->getMessage() . "\n");
  18. return;
  19. }
  20. print(__FUNCTION__ . ": OK" . "\n");
  21. }

提示:

  • 范围下载的内容也可以下载的文件;
  • 下载范围为闭区间[start, end], 包括两端的字节。

条件下载

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

参数 说明 PHP SDK对应值
If-Modified-Since 如果指定的时间早于实际修改时间,则正常传送。否则返回错误。 OssClient::OSS_IF_MODIFIED_SINCE
If-Unmodified-Since 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件;否则返回错误。 OssClient::OSS_IF_UNMODIFIED_SINCE
If-Match 如果传入期望的ETag和object的ETag匹配,则正常传输;否则返回错误。 OssClient::OSS_IF_MATCH
If-None-Match 如果传入的ETag值和Object的ETag不匹配,则正常传输;否则返回错误。 OssClient::OSS_IF_NONE_MATCH

注意:

  • 如果If-Modified-Since设定的时间不符合规范,直接返回文件,并返回200 OK;
  • If-Modified-Since和If-Unmodified-Since可以同时存在,If-Match和If-None-Match也可以同时存在;
  • 如果包含If-Unmodified-Since并且不符合或者包含If-Match并且不符合,返回412 precondition failed;
  • 如果包含If-Modified-Since并且不符合或者包含If-None-Match并且不符合,返回304 Not Modified。
  1. <?php
  2. /**
  3. * 如果文件在指定的时间之后修改过,则下载文件
  4. *
  5. * @param OssClient $ossClient OSSClient实例
  6. * @param string $bucket 存储空间名称
  7. * @return null
  8. */
  9. function getObject($ossClient, $bucket)
  10. {
  11. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12. try{
  13. $options = array(
  14. OssClient::OSS_HEADERS => array(
  15. OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 13 Nov 2015 14:47:53 GMT"),
  16. );
  17. $content = $ossClient->getObject($bucket, $object $options);
  18. } catch(OssException $e) {
  19. printf(__FUNCTION__ . ": FAILED\n");
  20. printf($e->getMessage() . "\n");
  21. return;
  22. }
  23. print(__FUNCTION__ . ": OK" . "\n");
  24. }

提示:

  • 文件的ETag值可以通过OssClient::getObjectMeta获取;
  • 条件下载的内容也可以下载的文件。
本文导读目录
本文导读目录
以上内容是否对您有帮助?