7

我想使用船长上传一个简单的文件。早些时候,可以使用 req.files 访问通过表单上传的文件,但知道在 Sails 0.10.x 中,默认安装了 skipper,req.files 是未定义的。而不是 req.file('filename') 用于访问文件。

我可以查看文档进行简单的文件上传。但是,我希望能够在上传之前访问文件名,并且还需要

  • 根据上传文件的用户将文件上传到动态创建的目录
  • 新创建文件的名称应该是 oldFileName + _ + timestamp in integer

我如何使用船长模块来做到这一点,或者更确切地说,最有效的方法是什么?

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

为了访问文件名,我使用了这个表达式

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

我可以看到,如果目录不存在,则船长会根据上传功能参数中给出的文件路径和名称自动创建目录

4

1 回答 1

11

目前这是 Skipper 中的一个问题 - 对此有 2 个 Pull-Request(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()-Function

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

在上传回调中:

fs.rename("/tmp/uploads/"+files[0].filename, "your_folder/" +files[0].filename, function(err){
.... });
于 2014-07-06T07:04:31.037 回答