php使用新浪雲Storage儲存上傳下載檔案,建立bucket、Bucket 操作、Object 上傳操作,Object 下載操作,Object 刪除操作、Object 複製操作,生成一個外網能夠訪
阿新 • • 發佈:2018-12-15
<?php //新浪雲 Storage PHP use use sinacloud\sae\Storage as Storage; // 方法一:在新浪雲執行環境中時可以不傳認證資訊,預設會從應用的環境變數中取 $s = new Storage(); //**Bucket 操作** // 建立一個 Bucket test $s->putBucket("test"); // 獲取 Bucket 列表 print_r($s->listBuckets()); // 獲取 Bucket 列表及 Bucket 中 Object 數量和 Bucket 的大小 print_r($s->listBuckets(true)); // 獲取 test 這個 Bucket 中的 Object 物件列表,預設返回前 1000 個,如果需要返回大於 1000 個 Object 的列表,可以通過 limit 引數來指定。 print_r($s->getBucket("test")); // 獲取 test 這個 Bucket 中所有以 a/ 為字首的 Objects 列表 print_r($s->getBucket("test", 'a/')); // 獲取 test 這個 Bucket 中所有以 a/ 為字首的 Objects 列表,只顯示 a/N 這個 Object 之後的列表(不包含 a/N 這個 Object)。 $s->getBucket("test", 'a/', 'a/N'); // Storage 也可以當成一個偽檔案系統來使用,比如獲取 a/ 目錄下的 Object(不顯示其下的子目錄的具體 Object 名稱,只顯示目錄名) $s->getBucket("test", 'a/', null, 10000, '/'); // 刪除一個空的 Bucket test $s->deleteBucket("test"); // 獲取 Bucket 列表 print_r($s->listBuckets()); /**Object 上傳操作**/ // 把 $_FILES 全域性變數中的快取檔案上傳到 test 這個 Bucket,設定此 Object 名為 1.txt $s->putObjectFile($_FILES['uploaded']['tmp_name'], "test", "1.txt"); // 把 $_FILES 全域性變數中的快取檔案上傳到 test 這個 Bucket,設定此 Object 名為 sae/1.txt $s->putObjectFile($_FILES['uploaded']['tmp_name'], "test", "sae/1.txt"); // 上傳一個字串到 test 這個 Bucket 中,設定此 Object 名為 string.txt,並且設定其 Content-type $s->putObject("This is string.", "test", "string.txt", array(), array('Content-Type' => 'text/plain')); // 上傳一個檔案控制代碼(必須是 buffer 或者一個檔案,檔案會被自動 fclose 掉)到 test 這個 Bucket 中,設定此 Object 名為 file.txt $s->putObject(Storage::inputResource(fopen($_FILES['uploaded']['tmp_name'], 'rb'), filesize($_FILES['uploaded']['tmp_name']), "test", "file.txt", Storage::ACL_PUBLIC_READ); /**Object 下載操作**/ // 從 test 這個 Bucket 讀取 Object 1.txt,輸出為此次請求的詳細資訊,包括狀態碼和 1.txt 的內容等 var_dump($s->getObject("test", "1.txt")); // 從 test 這個 Bucket 讀取 Object 1.txt,把 1.txt 的內容儲存在 SAE_TMP_PATH 變數指定的 TmpFS 中,savefile.txt 為儲存的檔名; //SAE_TMP_PATH 路徑具有寫許可權,使用者可以往這個目錄下寫檔案, //但檔案的生存週期等同於 PHP 請求,也就是當該 PHP 請求完成執行時,所有寫入 SAE_TMP_PATH 的檔案都會被銷燬 $s->getObject("test", "1.txt", SAE_TMP_PATH ."savefile.txt"); // 從 test 這個 Bucket 讀取 Object 1.txt,把 1.txt 的內容儲存在開啟的檔案控制代碼中/$s->getObject("test", "1.txt", fopen(SAE_TMP_PATH."savefile.txt", 'wb')); /**Object 刪除操作**/ // 從 test 這個 Bucket 刪除 Object 1.txt $s->deleteObject("test", "1.txt"); /**Object 複製操作**/ // 把 test 這個 Bucket 的 Object 1.txt 內容複製到 newtest 這個 Bucket 的 Object 1.txt $s->copyObject("test", "1.txt", "newtest", "1.txt"); // 把 test 這個 Bucket 的 Object 1.txt 內容複製到 newtest 這個 Bucket 的 Object 1.txt,並設定 Object 的瀏覽器快取過期時間為 10s 和 Content-Type 為 text/plain $s->copyObject("test", "1.txt", "newtest", "1.txt", array('expires' => '10s'), array('Content-Type' => 'text/plain')); /**生成一個外網能夠訪問的 url**/ // 為私有 Bucket test 中的 Object 1.txt 生成一個能夠在外網用 GET 方法臨時訪問的 URL,次 URL 過期時間為 600s $s->getTempUrl("test", "1.txt", "GET", 600); // 為 test 這個 Bucket 中的 Object 1.txt 生成一個能用 CDN 訪問的 URL $s->getCdnUrl("test", "1.txt"); /**除錯模式**/ // 開啟除錯模式,出問題的時候方便定位問題,設定為 true 後遇到錯誤的時候會丟擲異常而不是寫一條 warning 資訊到日誌。 $s->setExceptions(true); ?>