欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

云盤上使用aws_s3_sdkforphp的方法

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

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供北碚網(wǎng)站建設(shè)、北碚做網(wǎng)站、北碚網(wǎng)站設(shè)計、北碚網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、北碚企業(yè)網(wǎng)站模板建站服務(wù),10余年北碚做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

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

連接

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

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、實現(xiàn)簡單的文件上傳

$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';
    }
]);

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

3、異步分片上傳

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

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

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

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

當(dāng)web端所有分片都上傳完畢,同時所有分片也上傳到oss端后,調(diào)用完成上傳接口:

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

這樣就能實現(xiàn)web端上傳與服務(wù)端上傳oss的并發(fā)進(jìn)行,可節(jié)省大量的上傳時間。

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

下載

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

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

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

分頁查詢

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

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

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

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

$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;

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

感謝各位的閱讀,以上就是“云盤上使用aws_s3_sdk for php的方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對云盤上使用aws_s3_sdk for php的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)頁名稱:云盤上使用aws_s3_sdkforphp的方法
地址分享:http://aaarwkj.com/article38/pesjsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃企業(yè)建站、小程序開發(fā)、Google品牌網(wǎng)站建設(shè)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
亚洲熟女av一区少妇| 日韩欧美乱码一区二区| 亚洲精品视频久久免费| 日韩欧美在线观看一区二区| 日韩免费系列一区二区| 久久久久精品国产亚洲av影院| 国产又大又黄又粗的黄色| 极品美女被插到高潮喷水| 日本在线免费高清观看| 国产精品亚洲综合制服日韩| 日本高清视频免费一区| 久久精品中文字幕有码日本道| 亚洲av正片一区二区三区| 操小姑娘国产精品视频| 国产av白浆一区二区色爽黄| 欧美一区二区三区爽| 四虎成人免费永久视频| 亚洲av天堂天天天堂色| 福利午夜福利在线观看| 亚洲福利网址一二三区| 日韩国产人妻一区二区 | 一区二区在线视频中文字幕| 天堂av在线播放观看| 国产精品亚洲视频欧美视频| 日本大型午夜福利视频| 日韩精品亚洲一区二区三区免费| 亚洲成av人片乱码午夜| 日本亚洲欧美男人的天堂| 尤物在线观看视频播放| 欧美在线观看香蕉视频| 97人妻精品一区二区三区六| 日韩欧美精品在线不卡| 黑人巨大欧美一区二区| 亚洲国产日韩在线精品| 香蕉视频欧美日韩国产| 日本 午夜 在线 视频| 亚洲熟女av一区少妇| 色哟哟网站一区二区精品久久| 精品视频一区二区三区中文字幕| 久久国产三级久久久久久| 国产91黑丝视频在线观看|