このトピックでは、ファイルストリームやネットワークストリームなどのデータストリームをObject Storage Service (OSS) バケット内のオブジェクトにアップロードする方法について説明します。
ファイルストリームのアップロード
次のサンプルコードは、examplebucketバケットのexampledirディレクトリにあるexampleobject.txtオブジェクトにファイルストリームをアップロードする方法の例を示しています。
const OSS = require('ali-OSS ');
const fs = require('fs');
const client = new OSS({
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。
リージョン: 'yourRegion' 、
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID、
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
// バケットの名前を指定します。 例: examplebucket.
bucket: 'examplebucket' 、});
async関数putStream () {
try {
// chunkedエンコーディングを使用します。 putStreamを呼び出すと、OSS SDKはチャンクされたエンコードのHTTP PUTリクエストを開始します。
// ローカルファイルのフルパスを指定します。 データストリームは、ローカルファイルから読み取られる。
// ローカルファイルのパスが指定されていない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。
let stream = fs.createReadStream('D :\\ localpath\\examplefile.txt ');
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。
let result = await client.putStream('exampledir/exampleobject.txt '、stream);
// chunkedエンコーディングを使用しないでください。 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を設定して、ファイルストリームやネットワークストリームなど、Readable Streamの種類を指定できます。
// 'exampledir/exampleobject.txt ', stream, {contentLength: size});
console.log (結果);
} catch (e) {
console.log(e)
}
}
putStream();
Upload a network stream
次のサンプルコードは、examplebucketバケットのexampledirディレクトリにあるexampleobject.txtオブジェクトにネットワークストリームをアップロードする方法の例を示しています。
const OSS = require("ali-oss");
const fs = require("fs");
const urllib = require("urllib");
const client = new OSS({
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。
リージョン: 'yourRegion' 、
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID、
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
// バケットの名前を指定します。 例: examplebucket.
bucket: 'examplebucket' 、});
// ネットワークストリームのURLを指定します。
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20220908/cbgh/IMG_example.jpg";
// デュプレックスストリームをインポートします。
// streamを設定して、ファイルストリームやネットワークストリームなど、Readable Streamの種類を指定できます。
const Duplex = require("stream").Duplex;
// デュプレックスストリームをインスタンス化します。
let stream = new Duplex();
urllib.request(url, (err, data, res) => {
if (!err) {
// デュプレックスストリームからデータを受信します。
stream.push (データ);
stream.push(null);
client
// オブジェクトのフルパスを指定します。 例: example.png. バケット名をフルパスに含めないでください。
. putStream("example.png", stream)
. then((r) => console.log(r))
. catch((e) => console.log(e));
}
});
参考資料
ストリーミングアップロードの完全なサンプルコードについては、『GitHub』をご参照ください。