LoginSignup
5
2

More than 5 years have passed since last update.

[Sails.js] AWS S3にファイルアップロード・ダウンロード

Posted at

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;

参考情報

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2