すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ストリーミングアップロード

最終更新日:Dec 18, 2023

このトピックでは、ファイルストリームやネットワークストリームなどのデータストリームを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』をご参照ください。