Sails.js ver 1.0で、AWS S3 にファイルをアップロード・ダウンロードしてみたので、メモします。
ダウンロード(AWS-SDK)
AWSが提供しているaws-sdkを利用します。
AWSの認証情報は、config/awsCredentials.jsonというファイルに入れておく。
config/awsCredentials.json
{
"accessKeyId": "your access key",
"secretAccessKey": "your secret key",
"region": "ap-northeast-1"
}
api/controllers/FileController.js
const AWS = require('aws-sdk');
downloadFile: function (req, res) {
File.findOne(req.params.id)
.then((file) => {
AWS.config.loadFromPath('./config/awsCredential.json');
var s3 = new AWS.S3();
var params = {
Key: file.fd,
Bucket: 'files-bucket'
};
s3.getObject(params, (err, data) => {
if (err) {
return res.serverError(err);
}
res.attachment(orderFile.filename);
res.send(data.Body);
});
})
.catch((err) => {
res.serverError(err);
});
},
アップロード(skipper-s3)
Sailsはデフォルトでskipprerというbody parserを使っており、skipperのS3アップロード用のアダプターが提供されています。(skipper-s3)
これを使うと、S3へのアップロードは簡単に実装できました。
npm install skipper-s3 --save
※ Sailsではskipperはインストール済み
api/controllers/FileController.js
uploadFile: function (req, res) {
var file = req.file('file');
file.upload({
adapter: require('skipper-s3'),
key: sails.config.custom.awsKey,
secret: sails.config.custom.awsSecret,
bucket: 'files-bucket'
}, (err, uploadedFiles) => {
if (err) {
res.serverError(err);
}
sails.log("FILES:",uploadedFiles)
res.ok();
});
}
AWSの認証情報をsails.config.customに入れます。
config/custom.js
const fs = require('fs');
const awsCredentialFile = 'config/awsCredential.json';
const awsCredential = JSON.parse(fs.readFileSync(awsCredentialFile, 'utf8'));
module.exports = awsCredential;