ファイル (オブジェクト) をダウンロードする際に、1 つ以上の条件を指定できます。 指定した条件が満たされた場合にのみファイルがダウンロードされます。 条件が満たされない場合はエラーが返され、ダウンロードは開始されません。
注意事項
Webpack や Browserify などのパッケージングツールを使用する場合は、npm install ali-oss コマンドを実行して OSS SDK for Browser.js をインストールします。
ブラウザから OSS バケットにアクセスする際に、そのバケットに CORS ルールが設定されていない場合、ブラウザはリクエストを拒否します。 そのため、ブラウザからバケットにアクセスするには、バケットに CORS ルールを設定する必要があります。 詳細については、「インストール」をご参照ください。
ほとんどの場合、OSS SDK for Browser.js はブラウザで使用されます。 AccessKey ペアの漏洩を防ぐため、Security Token Service (STS) から取得した一時的なアクセス認証情報を使用して OSS にアクセスすることを推奨します。
一時的なアクセス認証情報は、AccessKey ペアとセキュリティトークンで構成されます。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 一時的なアクセス認証情報の取得方法の詳細については、「STS を使用した一時的なアクセス権限付与」をご参照ください。
サンプルコード
次のコードは、条件付きダウンロードの例を示しています。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id='upload'>Upload</button>
<button id='download'>Download</button>
<!--SDK ファイルをインポートします。-->
<script type="text/javascript" src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"></script>
<script type="text/javascript">
const client = new OSS({
// バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、region を oss-cn-hangzhou に設定します。
region: 'yourRegion',
authorizationV4: true,
// Security Token Service (STS) から取得した一時的な AccessKey ID と AccessKey Secret。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// STS から取得した SecurityToken。
stsToken: 'yourSecurityToken',
// バケット名を指定します。 例:examplebucket。
bucket: "examplebucket",
});
const download = document.getElementById('download')
const upload = document.getElementById('upload')
// ファイルをアップロードします。
upload.addEventListener('click', () => {
// アップロードするファイルの内容を指定します。
const file = new Blob(['examplecontent'])
// アップロードするファイルの完全なパスを指定します。 例:exampledir/exampleobject.txt。
const fileName = 'exampledir/exampleobject.txt'
const result = client.put(fileName, file).then(r => console.log(r))
})
// ファイルをダウンロードします。
download.addEventListener('click', () => {
// ダウンロードするバイト範囲を指定します。
const start = 1, end = 5
client.get('exampledir/exampleobject.txt', {
headers: {
// If-Modified-Since リクエストヘッダーに時刻を指定します。 指定した時刻がファイルの実際の変更時刻より前の場合、ファイルはダウンロードされます。 指定した時刻が実際の変更時刻と同じかそれ以降の場合、304 Not Modified が返されます。
"If-Modified-Since": new Date("1970-01-01").toGMTString()
// If-Unmodified-Since リクエストヘッダーに時刻を指定します。 指定した時刻がファイルの実際の変更時刻と同じかそれ以降の場合、ファイルはダウンロードされます。 指定した時刻が実際の変更時刻より前の場合、412 Precondition Failed が返されます。
//"If-Unmodified-Since": new Date(1970-01-01).toGMTString()
// If-Match リクエストヘッダーに ETag を指定します。 指定した ETag がファイルの ETag と一致する場合、ファイルはダウンロードされます。 指定した ETag が一致しない場合、412 Precondition Failed が返されます。
//"If-Match": '5B3C1A2E0563E1B002CC607C****'
// If-None-Match リクエストヘッダーに ETag を指定します。 指定した ETag がファイルの ETag と一致しない場合、ファイルはダウンロードされます。 指定した ETag が一致する場合、304 Not Modified が返されます。
//"If-None-Match": '5B3C1A2E0563E1B002CC607C****'
},
}).then(r => {
if (r.content.length > 0) {
const newBlob = new Blob([r.content], { type: r.res.headers['content-type'] });
const link = document.createElement('a')
link.href = window.URL.createObjectURL(newBlob)
link.download = 'foo.txt'
link.click()
window.URL.revokeObjectURL(link.href)
} else {
console.log('エラーコード', r.res.status)
console.log('条件を満たすダウンロード対象の項目がありません')
}
})
})
</script>
</body>
</html>