このトピックでは、ストリーミングアップロードを使用して、ファイルストリームやネットワークストリームなどのデータストリームをバケット内のオブジェクトにアップロードする方法について説明します。
ファイルストリームのアップロード
次のコードは、ファイルストリームを examplebucket バケット内の exampledir/ フォルダにある exampleobject.txt という名前のオブジェクトにアップロードする方法の例です。
const OSS = require('ali-oss');
const fs = require('fs');
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,
// バケット名を指定します。 例:examplebucket。
bucket: 'examplebucket',
});
async function putStream () {
try {
// チャンクエンコーディングを使用します。 putStream インターフェイスを使用すると、SDK はデフォルトでチャンクエンコーディングの HTTP PUT リクエストを送信します。
// データストリームの読み取り元となるローカルファイルの完全なパスを指定します。
// ローカルファイルの完全なパスにローカルパスを指定しない場合、ファイルはデフォルトでサンプルプログラムのプロジェクトに対応するローカルパスからアップロードされます。
let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
// オブジェクトの完全なパスを指定します。 例:exampledir/exampleobject.txt。 オブジェクトの完全なパスにバケット名を含めることはできません。
let result = await client.putStream('exampledir/exampleobject.txt', stream);
// チャンクエンコーディングを使用しません。 options で contentLength パラメーターを指定した場合、チャンクエンコーディングは使用されません。
// let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
// let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
// let result = await client.putStream(
// stream パラメーターには、ファイルストリームやネットワークストリームなど、読み取り可能なストリームを実装する任意のオブジェクトを指定できます。
// 'exampledir/exampleobject.txt', stream, {contentLength: size});
console.log(result);
} catch (e) {
console.log(e)
}
}
putStream(); ネットワークストリームのアップロード
次のコードは、ネットワークストリームを examplebucket バケット内の example.png という名前のオブジェクトにアップロードする方法の例です。
const OSS = require("ali-oss");
const fs = require("fs");
const urllib = require("urllib");
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,
// バケット名を指定します。 例:examplebucket。
bucket: 'examplebucket',
});
// ネットワークストリームの URL を指定します。
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/20220908/cbgh/image-processing_example.jpg";
// デュプレックスストリームをインポートします。
// stream パラメーターには、ファイルストリームやネットワークストリームなど、読み取り可能なストリームを実装する任意のオブジェクトを指定できます。
const Duplex = require("stream").Duplex;
// デュプレックスストリームをインスタンス化します。
let stream = new Duplex();
urllib.request(url, (err, data, res) => {
if (!err) {
// デュプレックスストリームを介してデータを受信します。
stream.push(data);
stream.push(null);
client
// オブジェクトの完全なパスを指定します。 例:example.png。 オブジェクトの完全なパスにバケット名を含めることはできません。
.putStream("example.png", stream)
.then((r) => console.log(r))
.catch((e) => console.log(e));
}
});関連ドキュメント
ストリーミングアップロードに関する完全なサンプルコードについては、「GitHub の例」をご参照ください。