全部产品
阿里云办公

下载文件

更新时间:2018-07-24 10:02:42

OSS PHP SDK提供了丰富的文件下载方式:

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

下载文件到本地文件

以下代码用于把指定的OSS文件下载到本地文件:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  10. $accessKeyId = "<yourAccessKeyId>";
  11. $accessKeySecret = "<yourAccessKeySecret>";
  12. // Endpoint以杭州为例,其它Region请按实际情况填写。
  13. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  14. $bucket= "<yourBucketName>";
  15. $object = "<yourObjectName>";
  16. $localfile = "<yourLocalFile>";
  17. $options = array(
  18. OssClient::OSS_FILE_DOWNLOAD => $localfile
  19. );
  20. try{
  21. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  22. $ossClient->getObject($bucket, $object, $options);
  23. } catch(OssException $e) {
  24. printf(__FUNCTION__ . ": FAILED\n");
  25. printf($e->getMessage() . "\n");
  26. return;
  27. }
  28. print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");

下载文件到本地内存

以下代码用于把指定的OSS文件下载到本地内存并打印出文件内容:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  10. $accessKeyId = "<yourAccessKeyId>";
  11. $accessKeySecret = "<yourAccessKeySecret>";
  12. // Endpoint以杭州为例,其它Region请按实际情况填写。
  13. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  14. $bucket= "<yourBucketName>";
  15. $object = "<yourObjectName>";
  16. try{
  17. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  18. $content = $ossClient->getObject($bucket, $object);
  19. } catch(OssException $e) {
  20. printf(__FUNCTION__ . ": FAILED\n");
  21. printf($e->getMessage() . "\n");
  22. return;
  23. }
  24. print($content);
  25. print(__FUNCTION__ . ": OK" . "\n");

范围下载

如果仅需要文件中的部分数据,您可以使用范围下载,下载指定范围内的数据,以下代码用于下载文件[0, 4]的内容到本地内存:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  10. $accessKeyId = "<yourAccessKeyId>";
  11. $accessKeySecret = "<yourAccessKeySecret>";
  12. // Endpoint以杭州为例,其它Region请按实际情况填写。
  13. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  14. $bucket= "<yourBucketName>";
  15. $object = "<yourObjectName>";
  16. // 获取0~4字节(包括0和4),共5个字节的数据。如果指定的范围无效(比如开始或结束位置的指定值为负数,或指定值大于文件大小),则下载整个文件。
  17. $options = array(OssClient::OSS_RANGE => '0-4');
  18. try{
  19. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  20. $content = $ossClient->getObject($bucket, $object, $options);
  21. } catch(OssException $e) {
  22. printf(__FUNCTION__ . ": FAILED\n");
  23. printf($e->getMessage() . "\n");
  24. return;
  25. }
  26. print ($content);
  27. print(__FUNCTION__ . ": OK" . "\n");

限定条件下载

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

参数 描述 如何设置
If-Modified-Since 如果指定的时间早于实际修改时间,则正常传输文件,否则返回错误(304 Not modified)。 OssClient::OSS_IF_MODIFIED_SINCE
If-Unmodified-Since 如果指定的时间等于或者晚于文件实际修改时间,则正常传输文件,否则返回错误(412 Precondition failed)。 OssClient::OSS_IF_UNMODIFIED_SINCE
If-Match 如果指定的ETag和OSS文件的ETag匹配,则正常传输文件,否则返回错误(412 Precondition failed)。 OssClient::OSS_IF_MATCH
If-None-Match 如果指定的ETag和OSS文件的ETag不匹配,则正常传输文件,否则返回错误(304 Not modified)。 OssClient::OSS_IF_NONE_MATCH

If-Modified-Since和If-Unmodified-Since可以同时存在。If-Match和If-None-Match可以同时存在。

ETag可以通过$ossClient->getObjectMeta方法获取。

条件下载既可以下载文件到本地内存又可以下载文件到本地文件。以下代码用于限定条件下载:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  10. $accessKeyId = "<yourAccessKeyId>";
  11. $accessKeySecret = "<yourAccessKeySecret>";
  12. // Endpoint以杭州为例,其它Region请按实际情况填写。
  13. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  14. $bucket= "<yourBucketName>";
  15. $object = "<yourObjectName>";
  16. try{
  17. $options = array(
  18. OssClient::OSS_HEADERS => array(
  19. OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 13 Nov 2015 14:47:53 GMT"),
  20. );
  21. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  22. $content = $ossClient->getObject($bucket, $object, $options);
  23. } catch(OssException $e) {
  24. printf(__FUNCTION__ . ": FAILED\n");
  25. printf($e->getMessage() . "\n");
  26. return;
  27. }
  28. print ($content);
  29. print(__FUNCTION__ . ": OK" . "\n");
本文导读目录