範囲のダウンロードを使用すると、オブジェクトから指定した範囲のデータをダウンロードできます。
有効な範囲を指定したデータダウンロード
指定した範囲の開始値と終了値がオブジェクトのサイズ内にある場合、その範囲内のコンテンツがダウンロードされます。 たとえば、ダウンロードするオブジェクトのサイズが 1,000 バイトの場合、有効な範囲は 0 バイト目から 999 バイト目までです。
以下に、有効な範囲を指定してダウンロードするサンプルコードを示します。
const OSS = require('ali-oss');
const client = new OSS({
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'yourRegion',
// 環境変数からアクセス認証情報を取得します。 このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します。
bucket: 'examplebucket'
});
async function main() {
const start = 1, end = 900;
// yourObjectName には、バケット名を含まないオブジェクトの完全なパス (例: destfolder/examplefile.txt) を指定します。
// ターゲットオブジェクトの 1 バイト目から 900 バイト目までのデータを取得します。 これには 1 バイト目と 900 バイト目が含まれ、合計 900 バイトになります。
// 指定した範囲の開始位置または終了位置が有効範囲外の場合、ファイル全体がダウンロードされ、HTTP コード 200 が返されます。
const result = await client.get("<yourObjectName>", {
headers: {
Range: `bytes=${start}-${end}`,
},
})
console.log(result.content.toString())
};
main();バケットの命名規則の詳細については、「バケット」をご参照ください。 オブジェクトの命名規則の詳細については、「オブジェクト」をご参照ください。
標準動作での範囲のダウンロード
指定した範囲が有効範囲外の場合、x-oss-range-behavior:standard リクエストヘッダーを追加して、OSS のダウンロード動作を変更できます。
以下に、標準動作を指定して範囲ごとにデータをダウンロードするサンプルコードを示します。
const OSS = require('ali-oss');
const client = new OSS({
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'yourRegion',
// 環境変数からアクセス認証情報を取得します。 このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します。
bucket: 'examplebucket'
});
async function main() {
// exampleobject.txt という名前の 10 バイトのファイルをアップロードします。
const buf = Buffer.from("abcdefghij");
await client.put("exampleobject.txt", buf);
const result = await client.get("exampleobject.txt", {
// Range: bytes=5-15 を指定します。 範囲の終了位置が有効範囲を超えています。 6 バイト目から 10 バイト目までのコンテンツが返され、HTTP コード 206 が返されます。
headers: {
Range: "bytes=5-15",
"x-oss-range-behavior": "standard",
},
});
console.log(result.content.toString() === 'fghij')
console.log(result.res.status === 206)
try{
await client.get("exampleobject.txt", {
// Range: bytes=15-25 を指定します。 範囲の開始位置が有効範囲を超えています。 InvalidRange エラーコードとともに HTTP コード 416 が返されます。
headers: {
Range: "bytes=15-25",
"x-oss-range-behavior": "standard",
},
})
}catch(e) {
console.log(e.status === 416);
console.log(e.name === 'InvalidRangeError')
}
}
main();リファレンス
範囲のダウンロードを実行するために呼び出すことができる API 操作の詳細については、「GetObject」をご参照ください。