阿里雲團隊努力不懈,力求將最新的技術內容更快地以您最熟悉的語言呈現。本文由簡體中文內容自動轉碼而成,過程無人工干預。阿里雲不保證此自動轉碼的準確性、完整性及時效性。因轉碼造成的任何內容錯誤及因此可能帶來的損失,阿里雲概不負責,敬請見諒。本文内容請以簡體中文版本為準。
全部產品
Search
文件中心

下載檔案

更新時間: Oct 19, 2018

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");