91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

云盤上使用aws_s3_sdk for php的方法

發布時間:2021-06-28 17:18:49 來源:億速云 閱讀:180 作者:chen 欄目:云計算

這篇文章主要講解了“云盤上使用aws_s3_sdk for php的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“云盤上使用aws_s3_sdk for php的方法”吧!

aws s3 全名是 Simple Storage Service,是對象存儲服務(oss),對象存儲服務作為網盤的優點這里就不細說了,其提供的統一接口sdk幾乎涵蓋了所有語言。除了通用性以外,其以上傳下載為核心的接口幾乎可以滿足所有的業務需求。本人在幾年的工作中對接過不同sdk的接口,可以說aws s3的接口,只有你想不到,沒有他做不到,雖然前提是你能從他那天書一樣的接口文檔中找到你想要的內容。下文是記錄下對接過程中s3幾個比較重要的接口,對象存儲是私有化部署,下文代碼是以php為開發語言(哪個開發語言不重要,只要語言底層支持io多路復用性能上都不會有太大區別)。

連接

access_key和secret_key是每個對象存儲都會提供的信息,在endpoint填寫自己私有化部署或者其它云服務商的對象存儲地址

use Aws\S3\S3Client;
use Aws\Credentials\Credentials;
use Aws\Exception\AwsException;
use Aws\Exception\MultipartUploadException;
use Aws\S3\ObjectUploader;
use Aws\S3\MultipartUploader;

$this->client = new S3Client([
    'endpoint' => $endpoint,
    'region' => 'us-east-1', //需要隨便一個region
    'service_name' => 's3',
    'verify' => 'False',
    'credentials' => new Credentials($aws_access_key_id, $aws_secret_access_key);,
    'version' => 'latest'
]);

上傳

1、實現簡單的文件上傳

$uploader = new ObjectUploader(
    $this->client,
    $bucket,
    $key,
    $source
);
$result = $uploader->upload();

2、分片上傳

如果文件較大,上傳時間會變慢,而且代碼會堵塞在upload部分,

所以可以通過接口提供分片上傳:

$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
    'before_initiate' => function (\Aws\Command $command) {
        $command['CacheControl'] = 'max-age=3600';
    }
]);

大致原理是對一個文件進行切割,然后并發上傳,該方法有多個參數,可控制每個分片的大小,同時上傳的分片數量或者每個分片上傳前、上傳后、上傳失敗等回調操作,十分靈活。

3、異步分片上傳

雖然上面的分片上傳操作可減少大文件上傳時間,但是像一些上傳文件的操作,從web端上傳到服務端,需要先上傳整個文件到服務端,然后服務端再上傳文件到oss端。這樣的話如果服務端使用oss做文件存儲,就算web端使用了分片上傳到服務端,服務端也得等待所有分片上傳完畢,合成最終文件,再將文件上傳到oss端,這樣上傳時間會變多。所以要優化分片上傳的操作,可以使用s3提供的異步分片上傳功能:

$res = $this->client->createMultipartUpload(array_merge([
    'Bucket' => $bucket, // REQUIRED
    'Key' => $key, // REQUIRED
    'Expires' => $expire,
], $args));
return $res;

上面代碼提供了一個分片上傳任務,并返回一個upload_id,這樣當web端上傳了一個文件的分片,可根據upload_id先上傳到oss端,oss端將分片暫時保存到內存中(需要根據分片順序填寫PartNumber):

$res = $this->client->uploadPart([
    'Body' => $source,
    'Bucket' => $bucket, // REQUIRED
    'Key' => $key, // REQUIRED
    'PartNumber' => $PartNumber, // REQUIRED
    'UploadId' => $UploadId, // REQUIRED
]);
return $res;

當web端所有分片都上傳完畢,同時所有分片也上傳到oss端后,調用完成上傳接口:

$res = $this->client->completeMultipartUpload([
    'Bucket' => $bucket, // REQUIRED
    'Key' => $key, // REQUIRED
    'MultipartUpload' => $MultipartUpload,
    'UploadId' => $UploadId, // REQUIRED
]);
return $res;

這樣就能實現web端上傳與服務端上傳oss的并發進行,可節省大量的上傳時間。

上面是上傳的主要功能,每個接口還提供了大量的參數和回調方法,主要很多參數和回調現在也沒有需求用得上,在此就不一一列舉

下載

php sdk的下載功能比起python來說功能比較簡陋,但也可以實現分片下載功能,涉及到下載文件的只有一個接口:

$res = $this->client->getObject(array_merge([
    'Bucket' => $bucket,
    'Key' => $key,
    'Range' => 'bytes=0-9',
    'SaveAs' => '/path/to/save/file'
], $args));
return $res;

其中比較重要的是range參數,它實現了瀏覽器的斷點續傳功能,當瀏覽器請求文件下載時,如果文件存儲在oss,普通情況下需要把文件先下載下來,然后再讓瀏覽器分片下載,但是通過傳遞range參數,把文件對應的分片從oss下載下來,然后再發送給web端,實現了持續從oss端下載到web端,中間無阻隔

分頁查詢

普通的分頁查詢可使用listObjects:

$result = $this->client->listObjects([
    'Bucket' => '<string>', // REQUIRED
    'Delimiter' => '<string>',
    'EncodingType' => 'url',
    'ExpectedBucketOwner' => '<string>',
    'Marker' => '<string>',
    'MaxKeys' => <integer>,
    'Prefix' => '<string>',
]);

使用MaxKeys作為每頁數量,Marker作為每次請求一頁中的最后一個文件,作為key傳給下一頁請求的marker,類似offset的作用。

實際上由于oss沒有分頁功能,普通這樣的請求只能從第一頁開始查詢直到想查詢的頁數,浪費大量的資源。所以可以通過oss提供的分頁迭代器來實現:

$args['Bucket'] = $bucket;
$args['MaxKeys'] = $limit;
$results = $this->client->getPaginator('ListObjects', $args);
$total_results = [];
for ($i = 0; $i < $offset; $i++) {
    if ($results->valid()) {
        $results->next();
    } else {
        break;
    }
}
if ($results->valid()) {
    array_push($total_results, $results->current());
    $results->next();
}
return $total_results;

迭代器是幾乎所有語言都有實現的功能,他的作用是保存代碼上下文狀態,例如上面的代碼,通過迭代器形成一個分頁工具,當使用next進行翻頁,底層代碼不需要請求接口,而是通過指針指向下一頁,這樣就能實現快速翻頁,獲取對應頁數的文件。

感謝各位的閱讀,以上就是“云盤上使用aws_s3_sdk for php的方法”的內容了,經過本文的學習后,相信大家對云盤上使用aws_s3_sdk for php的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

集贤县| 阜阳市| 祁连县| 平乡县| 台南市| 平阴县| 新巴尔虎左旗| 榆林市| 德安县| 仪陇县| 简阳市| 江油市| 墨竹工卡县| 阿克苏市| 攀枝花市| 武夷山市| 黄山市| 晋城| 驻马店市| 屯昌县| 奉节县| 深泽县| 南部县| 抚宁县| 台前县| 工布江达县| 宝丰县| 亚东县| 潮州市| 体育| 乌兰察布市| 镇平县| 宝丰县| 临朐县| 灵川县| 南岸区| 庐江县| 长兴县| 太谷县| 合山市| 五莲县|