全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
对象存储 OSS

下载文件

更新时间:2018-05-28 16:21:32

OSS PHP SDK提供了丰富的文件下载方式,您可以通过以下方式从OSS下载文件(Object):

  • 下载文件到本地文件
  • 下载文件到本地内存
  • 范围下载
  • 条件下载

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

下载文件到本地文件

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

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

范围下载

如果OSS文件较大,而您只需要其中一部分数据,可以使用范围下载,下载指定范围的数据。

例如指定的下载范围是0-100,则返回第0到第100,共101个字节的数据,即闭区间[0, 100],包含两端字节。如果指定的范围无效,则下载整个文件。范围下载既可以下载到本地内存,又可以下载到本地文件。

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

  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. $options = array(OssClient::OSS_RANGE => '0-4');
  13. try{
  14. $ossClient->putObject($bucket, $object, "test-content");
  15. $content = $ossClient->getObject($bucket, $object, $options);
  16. } catch(OssException $e) {
  17. printf(__FUNCTION__ . ": FAILED\n");
  18. printf($e->getMessage() . "\n");
  19. return;
  20. }
  21. print(__FUNCTION__ . ": OK" . "\n");
  22. }

以下代码可以下载文件[0, 4]的内容到本地文件:

  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. $localfile = "download-test-object-name.txt";
  13. $options = array(
  14. OssClient::OSS_RANGE => '0-4',
  15. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  16. );
  17. try{
  18. $ossClient->putObject($bucket, $object, "test-content");
  19. $ossClient->getObject($bucket, $object, $options);
  20. } catch(OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. print(__FUNCTION__ . ": OK" . "\n");
  26. }

条件下载

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

参数 描述 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获取。

本文导读目录