OSS SDK for Browser.jsを使用すると、Object Storage Service (OSS) のリソースをプログラムで管理できます。 たとえば、バケットの管理、オブジェクトのアップロード、オブジェクトのダウンロード、画像の処理などを行うことができます。 このトピックでは、OSS SDK for Browser.jsをインストールして使用する方法について説明します。
前提条件
OSSにアクセスするために、Resource Access Management (RAM) ユーザーまたは一時的なアクセス資格情報がSecurity Token Service (STS) で作成されます。
Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 したがって、セキュリティのためにAlibaba Cloudのベストプラクティスに従うことを推奨します。 サービスをサーバーにデプロイする場合、RAMユーザーまたは一時的なアクセス資格情報を使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりできます。サービスをクライアントにデプロイする場合は、一時的なアクセス資格情報を使用してAPI操作を呼び出します。 詳細については、「概要」をご参照ください。
クロスオリジンリソース共有 (CORS) ルールが設定されています。
ブラウザを使用してOSSにアクセスするには、次の要件に基づいてCORSルールを設定します。
ソース: 完全なオリジンURL (例:
https://www.aliyun.com
) を指定するか、アスタリスク (*) ワイルドカード文字 (例:https:// * .aliyun.com
) を含むURLを指定します。許可されたメソッド: 要件に基づいてメソッドを選択します。 たとえば、[PUT] を選択してマルチパートアップロードを実行し、[DELETE] を選択してオブジェクトを削除します。
許可されたヘッダー: 値を
*
に設定します。公開ヘッダー: 特定の要件に基づいて、値を
ETag
、x-oss-request-id
、またはx-oss-version-id
に設定します。
詳細については、「CORS の設定」をご参照ください。
制限事項
OSS SDK for Browser.jsは、BrowserifyとBabelを使用して、ブラウザのコードを生成およびコンパイルします。 ただし, ブラウザ环境の制限により, 次の机能はブラウザではサポートされていません。
ストリーミングアップロード: ブラウザでチャンク化されたエンコーディングを設定できません。 ストリーミングアップロードの代わりにマルチパートアップロードを使用することを推奨します。
ローカルファイル管理: ローカルファイルシステムはブラウザで管理できません。 署名付きURLを使用してオブジェクトをダウンロードすることを推奨します。
OSSは、オリジン間のバケット関連のリクエストをサポートしていません。 OSSコンソールでバケット関連の操作を実行することを推奨します。
OSS SDK for Browser.jsをダウンロードする
Alibaba Cloud公式サイトのドキュメントのデモは、OSS SDK for Browser.js V6.xに基づいています。 以前のバージョンのOSS SDK for Browser.jsを使用している場合は、GitHubにアクセスして、V5.xの開発者ガイドをご覧ください。 OSS SDK for Browser.jsをV6.xにアップグレードするには、アップグレードドキュメントをご参照ください。
OSS SDK for Browser.jsのインストール
OSS SDK for Browser.jsは、次のブラウザをサポートしています。
Internet Explorer V10以降
Edge
Google Chrome、Firefox、およびSafariのメジャーバージョン
メジャーバージョンのAndroid、iOS、およびWindows Phoneのデフォルトのブラウザ
インストール方法
次のいずれかの方法を使用して、OSS SDK for Browser.jsをインストールできます。
ブラウザを使用したOSS SDK for browser. jsのインポート
重要一部のブラウザは、約束のネイティブサポートを提供しません。 この場合、promiseライブラリをインポートする必要があります。 たとえば、promise-polyfillをInternet Explorer 10および11にインポートする必要があります。
<!-- Import online --> <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.1.min.js"></script> <!-- Import locally --> <script src="./aliyun-oss-sdk-6.18.1.min.js"></script>
説明SDKをオンラインでインポートする場合、速度はAlibaba Cloud CDNサーバーの安定性に依存します。 SDKをローカルに、または独自の実装を使用してインポートすることを推奨します。
サンプルプログラムのローカルリソースからSDKをインポートする場合は、サンプルプログラムのパスを基準としたローカルリソースのパスにsrcを設定します。
この例では、OSS SDK 6.18.1が使用されています。 その他のバージョンについては、『GitHub』をご参照ください。
次のコードは、OSSオブジェクトの使用方法の例を示しています。
重要ほとんどの場合、ブラウザではOSS SDK for Browser.jsが使用されます。 AccessKeyペアが公開されないように、STSから取得した一時的なアクセス資格情報を使用してOSSにアクセスすることを推奨します。
一時的なアクセス資格情報は、AccessKeyペアとセキュリティトークンで構成されます。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 AssumeRole操作を呼び出すか、さまざまなプログラミング言語のSTS SDKを使用して、一時的なアクセス資格情報を取得できます。 詳細については、「STSが提供する一時的なアクセス資格情報を使用したOSSへのアクセス」をご参照ください。
<script type="text/Browser.jsscript"> const client = new OSS({ // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. region: 'yourRegion', // Specify the temporary AccessKey pair obtained from STS. The AccessKey pair consists of an AccessKey ID and an AccessKey secret. accessKeyId: 'yourAccessKeyId', accessKeySecret: 'yourAccessKeySecret', // Specify the security token obtained from STS. stsToken: 'yourSecurityToken', refreshSTSToken: async () => { // Obtain temporary access credentials from STS. const info = await fetch('your_sts_server'); return { accessKeyId: info.accessKeyId, accessKeySecret: info.accessKeySecret, stsToken: info.stsToken } }, // Set the time interval of refreshing temporary access credentials. Unit: milliseconds. refreshSTSTokenInterval: 300000, // Specify the name of the bucket. bucket: 'examplebucket' }); </script>
npmを使用してOSS SDK for Browser.jsのパッケージをインストールする
npm install ali-oss
インストールが完了したら、インポートを使用するか、OSS SDK for Browser.jsを使用する構文を要求できます。 ブラウザは、
require
構文のネイティブサポートを提供しません。 そのため、開発環境ではwebpack
やbrowserify
などのパッケージングツールを使用する必要があります。const OSS = require('ali-oss'); const client = new OSS({ // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. region: 'yourRegion', // Specify the temporary AccessKey pair obtained from STS. The AccessKey pair consists of an AccessKey ID and an AccessKey secret. accessKeyId: 'yourAccessKeyId', accessKeySecret: 'yourAccessKeySecret', // Specify the security token obtained from STS. stsToken: 'yourSecurityToken', refreshSTSToken: async () => { // Obtain temporary access credentials from the STS that you set up. const info = await fetch('your_sts_server'); return { accessKeyId: info.accessKeyId, accessKeySecret: info.accessKeySecret, stsToken: info.stsToken } }, // Set the time interval at which to refresh the temporary access credentials. Unit: milliseconds. refreshSTSTokenInterval: 300000, // Specify the name of the bucket. bucket: 'examplebucket' });
使用モード
OSS SDK for Browser.jsを使用する場合は、同期モードまたは非同期モードを使用できます。 同期モードまたは非同期モードを使用する場合、new OSS()
を使用してOSSクライアントを作成します。
同期モード
JavaScript ES7で定義されているasync/awaitメソッドは、非同期操作を同期するために使用されます。
次のコードは、同期モードでオブジェクトをアップロードする方法の例を示しています。
// Create an OSSClient instance.
const client = new OSS(...);
async function put () {
try {
// object specifies the name of the uploaded object.
// file specifies the name of the file that you want to upload from the browser. Files of the HTML5 and Blob types are supported.
const r1 = await client.put('object', file);
console.log('put success: %j', r1);
const r2 = await client.get('object');
console.log('get success: %j', r2);
} catch (e) {
console.error('error: %j', e);
}
}
put();
非同期モード
非同期操作は、コールバックと同様の方法で実行されます。 API操作は、リクエストのPromiseオブジェクトを返します。 then()
メソッドは返された結果を処理するために使用され、catch()
メソッドはエラーを処理するために使用されます。
次のコードは、非同期モードでオブジェクトをアップロードする方法の例を示しています。
// Create an OSSClient instance.
const client = new OSS(...);
// object specifies the name of the uploaded object.
// file specifies the name of the file that you want to upload from the browser. Files of the HTML5 and Blob types are supported.
client.put('object', file).then(function (r1) {
console.log('put success: %j', r1);
return client.get('object');
}).then(function (r2) {
console.log('get success: %j', r2);
}).catch(function (err) {
console.error('error: %j', err);
});