はじめに
IBM Cloud Object Storage、略してICOS。使ってますか?
調べてもNode.jsから画像を保存するコードがなかったのでメモ。
前提条件
ICOSのサービスをIBM Cloud上に作成いていること
ICOSのUIで「バケット」を作成していること
ソースコード
$ npm i ibm-cos-sdk --save
$ node app.js
app.js
var AWS = require('ibm-cos-sdk');
var config = {
endpoint: //endpoint,
apiKeyId: //apiKeyId,
ibmAuthEndpoint: //ibmAuthEndpoint,
serviceInstanceId: //serviceInstanceId,
};
var cos = new AWS.S3(config);
var params = {
Bucket: //バケット名,
Key: //ファイル名,
ContentEncoding: 'base64',
ContentType: 'image/png',
ACL: 'public-read',
Body: //画像のbase64文字列
};
cos.putObject(params, function(err, data) {
//Object Storageに格納したあとの処理
//エラーハンドリングとか。
});
備考
- configの中身はIBM Cloudで作成したICOSのサービス資格情報から取得してください。
-
保存したファイルのURLは以下です
-
paramsのACLの値を変えるとアクセス制御できます。
- 上記コードでは誰でも見られる状態で保存されます。ACLの値は以下です(AWSドキュメントから引用)
- https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html
既定 ACL | Applies to | ACL に追加されるアクセス許可 |
---|---|---|
private | バケットとオブジェクト | 所有者は FULL_CONTROL を取得します。他のユーザーにはアクセス許可は付与されません (デフォルト)。 |
public-read | バケットとオブジェクト | 所有者は FULL_CONTROL を取得します。AllUsers グループ (被付与者とは を参照) は READ アクセス許可を取得します。 |
public-read-write | バケットとオブジェクト | 所有者は FULL_CONTROL を取得します。AllUsers グループは READ および WRITE アクセス許可を取得します。通常、これをバケットで付与することはお勧めしません。 |
aws-exec-read | バケットとオブジェクト | 所有者は FULL_CONTROL を取得します。Amazon EC2 は、Amazon S3 から Amazon Machine Image (AMI) バンドルを GET するための READ アクセスを取得します。 |
authenticated-read | バケットとオブジェクト | 所有者は FULL_CONTROL を取得します。AuthenticatedUsers グループは READ アクセス許可を取得します。 |
bucket-owner-read | オブジェクト | オブジェクト所有者は FULL_CONTROL を取得します。バケット所有者は READ を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。 |
bucket-owner-full-control | オブジェクト | オブジェクト所有者とバケット所有者はオブジェクトに対する FULL_CONTROL を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。 |
log-delivery-write | バケット | LogDelivery グループはバケットに対する WRITE および READ_ACP アクセス許可を取得します。ログの詳細については、「Amazon S3 サーバーアクセスのログ記録」を参照してください。 |
最後に
ICOSはAWS S3のドキュメントも参考になります。
ICOSでいろいろと便利なアプリが作れそうなのでこれからも使ってみようかと思います。