このトピックでは、オブジェクトのアップロードまたはダウンロードリクエストにパラメーターを追加して、アップロードまたはダウンロードの帯域幅の上限を設定する方法について説明します。これにより、他のアプリケーションに十分な帯域幅を確保できます。
シンプルアップロードとダウンロードの速度制限
次のコードは、シンプルアップロードとシンプルダウンロードに単一接続の帯域幅制限を設定する方法を示しています。
const OSS = require('ali-oss')
const fs = require('fs')
const client = new OSS({
// yourregion をバケットが配置されているリージョンに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を 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,
// yourbucketname をバケット名に置き換えます。
bucket: 'yourbucketname'
});
// リクエストヘッダーで帯域幅制限を設定します。
const headers = {
// 速度制限値を設定します。最小値は 100 KB/s です。
'x-oss-traffic-limit': 8 * 1024 * 100
}
// 帯域幅制限付きでアップロードします。
async function put() {
// ファイルパス。
const filePath = 'D:\\localpath\\examplefile.txt';
// ファイルストリームオブジェクトを作成します。
const fileStream = fs.createReadStream(filePath);
const result = await client.putStream('file-name', fileStream, {
// リクエストヘッダーを設定します。
headers,
// デフォルトのタイムアウト期間は 60000 ms です。リクエストがタイムアウトすると、タイムアウトエラーが報告されます。帯域幅制限付きでアップロードする場合は、タイムアウト期間を調整してください。
timeout: 60000
});
console.log(result);
}
put()
// 帯域幅制限付きでダウンロードします。
async function get() {
const result = await client.get('file name', {
headers,
// デフォルトのタイムアウト期間は 60000 ms です。リクエストがタイムアウトすると、タイムアウトエラーが報告されます。帯域幅制限付きでダウンロードする場合は、タイムアウト期間を調整してください。
timeout: 60000
})
console.log(result)
}
get()署名付き URL を使用した帯域幅制限付きのアップロードとダウンロード
次のコードは、署名付き URL を使用するアップロードとダウンロードに単一接続の帯域幅制限を設定する方法を示しています。
const OSS = require('ali-oss')
const client = new OSS({
// yourregion をバケットが配置されているリージョンに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を 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,
// yourbucketname をバケット名に置き換えます。
bucket: 'yourbucketname',
});
// URL クエリを使用して帯域幅制限付きでアップロードします。
async function putByQuery() {
const url = client.signatureUrl('file name', {
// 速度制限値を設定します。最小値は 100 KB/s です。
trafficLimit: 8 * 1024 * 100,
// リクエストメソッドを PUT に設定します。
method: 'PUT'
})
// ファイルパスを設定します。
const filePath = 'D:\\localpath\\examplefile.txt';
// ファイルストリームオブジェクトを作成します。
const fileStream = fs.createReadStream(filePath);
const result = await client.urllib.request(url, {
method: 'PUT',
// ファイルストリームオブジェクトをパラメーターとして使用します。
stream: fileStream,
// デフォルトのタイムアウト期間は 60000 ms です。帯域幅制限を有効にした後、タイムアウト期間を調整してください。そうしないと、リクエストは失敗します。
timeout: 60000,
});
console.log(result)
}
putByQuery()
// URL クエリを使用して帯域幅制限付きでダウンロードします。
async function getByQuery() {
const url = client.signatureUrl('file name', {
// 速度制限値を設定します。最小値は 100 KB/s です。
trafficLimit: 8 * 1024 * 100,
})
const result = await client.urllib.request(url, {
// デフォルトのタイムアウト期間は 60000 ms です。帯域幅制限を有効にした後、タイムアウト期間を調整してください。そうしないと、リクエストは失敗します。
timeout: 60000,
});
console.log(result)
}
getByQuery()関連ドキュメント
単一接続の帯域幅制限の完全なサンプルコードについては、「GitHub の例」をご参照ください。