Как изменить случайно загруженное имя файла в S3 - Sails.JS

В настоящее время я использую SailsJS для создания своих собственных веб-приложений. И я использую Skipper-S3 для загрузки файлов в AWS S3. И это мой код:

req.file('uploadFile').upload({
  adapter: require('skipper-s3'),
  key: 'KEY',
  secret: 'SECRET',
  bucket: 'BUCKET',
  ACL: 'public-read'
}, function whenDone(err, filesUploaded) {
  if (err) {
    console.log(err);
    return res.negotiate(err);
  }

  var pt = {
    user: req.session.User.id,
    agency: req.param('id'),
    path: filesUploaded[0].extra.Location,
    filename: filesUploaded[0].filename
  };

  Transaction.create(pt, function TransactionCreated(err, trans){
    if(err) return next(err);

    return res.ok({
      files: filesUploaded,
      textParams: req.params.all(),
      trans: trans
    });
  })
});

Поэтому я уже поместил "путь" и "оригинальное имя файла" в MongoDB. Но "имя файла" внутри S3 уже изменено на "случайное имя". Итак, возможно ли изменить "исходное имя файла" при загрузке? ИЛИ автоматически изменить на "оригинальное имя файла", когда пользователь захочет его скачать?

С уважением, Джон Элмер Семая

2 ответа

Решение

После просмотра документации шкипера я нашел о saveAs опции. Нужно только положить его внутрь req.file('name').upload чтобы сохранить его под своим исходным именем или под другим именем.

это пример:

var newFilename = req.file('uploadFile')._files[0].stream.filename;

req.file('uploadFile').upload({
   adapter: require('skipper-s3'),
   key: 'KEY',
   secret: 'SECRET',
   bucket: 'BUCKET',
   ACL: 'public-read,
   saveAs: newFilename //this is how you put custom name when upload file
},
   ...
});

Вы можете установить ключевой параметр s3params.

const options = {
  adapter: require('skipper-s3'),
  key: 'KEY',
  secret: 'SECRET',
  bucket: 'BUCKET',
  s3params: {Key: 'full/path/to/file.jpg'} //no leading slash prevents empty folder
}

const adapter = require('skipper-better-s3')(options),
      receiver = adapter.receive();

req.file('uploadFile').upload(receiver, function(err,filesUploaded){
  //do something...
})

//More useful below

const fs = require('fs');
const file = fs.createReadStream('/tmp/my-file.jpg');

receiver.write(file, () => { 
  console.log(file.extra);
});
Другие вопросы по тегам