Sails.JS使用skipper进行文件上传,如何访问原始文件名和动态上传路径

7

我想使用skipper上传一个简单的文件。之前,通过表单上传的文件可以使用req.files进行访问,但了解到在Sails 0.10.x中,默认安装了skipper,req.files未定义。现在需要使用req.file('filename')来访问文件。

我已经查看了文档并成功进行了简单的文件上传。然而,我希望能够在上传文件之前访问文件名,并且还需要:

  • 将文件上传到基于上传用户动态创建的目录中
  • 新创建的文件名应为oldFileName + _ + 时间戳(整数)

如何使用skipper模块实现这一点?或者说,最有效的方法是什么?

编辑
到目前为止,我已经做到了这一点,但我希望有更好的方法。

要访问文件名,我使用了以下表达式:

var inputFileName = req.file('inputFile')._files[0]["stream"]["filename"];

我能看到,skipper根据上传函数中给定的文件路径和名称自动创建目录(如果该目录不存在)。

1个回答

11

目前Skipper存在一个问题 - 有2个拉取请求 (https://github.com/balderdashy/skipper/issues/12) - 但我不知道何时合并并可用。

要解决您的问题,请执行以下操作:

1. 覆盖文件名

// save original file name
var origifile = req.file('testfile')._files[0].stream.filename;
var filename = origifile;

// check if file is existing and change filename if necessary
while(fs.existsSync(".tmp/uploads/" +filename)){
   // Add 4 random chars at he beginning of the filename
   filename = randString(3)+"_"+origifile; 
};

req.file('testfile').upload(filename,function (err, files) {

注意:您需要编写一个randString()-函数。

2.将上传的文件移动到您的文件夹中

在上传回调中:

fs.rename("/tmp/uploads/"+files[0].filename, "your_folder/" +files[0].filename, function(err){
.... });

谢谢,那最终是我所做的。我在文件名末尾添加了一个时间戳(整数)后缀,然后是扩展名。 - Mandeep Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接