Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何更改S3-Sails.JS中随机上传的文件名_Amazon S3_Sails.js_Skipper - Fatal编程技术网

Amazon s3 如何更改S3-Sails.JS中随机上传的文件名

Amazon s3 如何更改S3-Sails.JS中随机上传的文件名,amazon-s3,sails.js,skipper,Amazon S3,Sails.js,Skipper,目前,我正在使用SailsJS创建自己的web应用程序。我使用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

目前,我正在使用SailsJS创建自己的web应用程序。我使用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中的“文件名”已经用“随机名称”更改。那么,上传时是否可以更改为“原始文件名”?或者当用户想要下载时自动更改为“原始文件名”

问候,, 约翰·埃尔默·塞马亚(John Elmer Semaya)

在查找之后,我找到了关于
saveAs
的选项。只需将其放入
req.file('name')中即可。上传
即可使用原始名称或其他自定义名称保存

例如:

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);
});