AWSのS3を使うことになりました。リファレンス読んでNode.jsで書いてみました。

※記事タイトル「ファイル」って言ってますが、「オブジェクト」って言うのが正しいんだと思います。


Windows10上でやりました。Node.jsのバージョンは8.10.0です。

前提

アクセスキーの準備が必要です。

以下の記事に書いてあるので、分からない人は読んでみてください。

サンプル

サンプルを実行するためにカラのフォルダを作って、npm で aws-sdk をインストールします。

npm install --save-dev aws-sdk

このフォルダの中に以下のソースコードを index.js として設置し、node コマンドで実行します。

実行すると、S3バケット『mybucket』の全ファイルの1行目の内容がコンソールに出力されます。

index.js
'use strict';

const aws = require('aws-sdk');
aws.config.update({	
	region: 'ap-northeast-1',  // ここでは東京リージョンを入力
});
const s3 = new aws.S3();

(async() => {
	// 全てのオブジェクトキーを走査してキーリストを作る
	let keyList = [];
	for (let continuationToken = null;;) {
		// パラメータ作成
		const params = {
			Bucket: 'mybucket',  // バケット名
		};
		if (continuationToken) {
			// 読み込み開始位置 (ContinuationToken) がある場合はパラメータに追加
			params.ContinuationToken = continuationToken;
		}
		
		// オブジェクトのリストを取得
		const res = await s3.listObjectsV2(params).promise();
		
		// オブジェクトキー (Key属性) だけ取り出してキーリストに追加
		res.Contents.map(v => v.Key).forEach(v => {
			keyList.push(v);
		});
		
		// listObjectsV2 が一度に取得できるのは1000件まで
		// リストが切り詰められている場合は IsTruncated がtrueになる
		if (!res.IsTruncated) {
			break;
		}
		
		// 次の読み込み開始位置を保存
		continuationToken = res.NextContinuationToken;
	}
	
	// 全てのオブジェクトを処理
	for (let key of keyList) {
		// オブジェクトを取得
		const res = await s3.getObject({
			Bucket: 'mybucket',
			Key: key
		}).promise();
		
		// ファイル本文 (Buffer) をUTF-8でデコード
		const body = res.Body.toString('utf8');
		
		// 1行目だけコンソールに出力
		console.log(key + ' ->', body.split('\n')[0].trim());
	}
})();

オブジェクト一覧の取得には listObjectsV2() を使いました。listObjects() の方は、次ページの取得方法がよくわからなかったので、使いませんでした。

オブジェクト一覧は一度に1000件までしか取得できないので、このサンプルでは、全ファイルを取得できるようにループ処理してます。

メモ

公式のAWS SDK for JavaScriptリファレンス。