nodejs强大的带有时间戳的文件名

时间:2015-06-16 08:57:13

标签: node.js fs formidable

我通过互联网搜索但我找不到解决方案。 我使用Nodejs Formidable处理上传的文件并将其保存到我的API中。

一切正常,但我想知道如何使用唯一的文件名更改文件名(例如:Timestamp)(同时保留原始文件扩展名)。

以下是我使用的代码:

form.on('end', function (fields, files) {

        var temp_path = this.openedFiles[0].path;
        var file_name = this.openedFiles[0].name;
        var new_location = GLOBAL.config.uploadDir;

        fs.move(temp_path, new_location + file_name, {clobber:true}, function (err) {
            if (err) {
                console.error(err);

                fs.unlink(temp_path, function (err) {
                    if (err) {
                        console.error(err);
                        console.log("TROUBLE deletion temp !");
                    } else {
                        console.log("success deletion temp !");
                    }
                });

            } else {
                res.json('created');
            }
        });
    });

任何机构都可以建议解决这个问题吗?拜托?

4 个答案:

答案 0 :(得分:0)

你的意思是:
1.您上传a.txt之类的文件 2.服务器将其存储到/your_path/a_1434449842377.txt

https://www.npmjs.com/package/rename

rename('a.js', function() {
  return {suffix: '-'+Date.now()};
});
// => a-timestamp_of_now.js

答案 1 :(得分:0)

根据文档,您可以更改强大的文件名将用于保存上传的文件名。

请参见here,特别是(强调我的):

  

file.path = null

     

此文件正在写入的路径。 您可以在'fileBegin'事件中对此进行修改,以防您对forid为您的文件生成临时路径的方式感到不满。

所以试试这个(未经测试):

form.on('fileBegin', function(name, file) {
  file.path = '/your/prefered/path/name.ext';
});

答案 2 :(得分:0)

我找到了解决方案:-) 首先需要路径:var path = require('path');

然后我就这样做了:

var extension = path.extname(this.openedFiles[0].name);
var file_name = new Date().getTime() + extension;

// fs.move from fs-extra move the temp file to destination and unlink it
fs.move(temp_path, new_location + file_name, {clobber:true}, function (err) {
       // Do something     
});

答案 3 :(得分:0)

我做了一些小技巧,我认为这是最简单的方法

let myFileName = 'image.png';
myFileName = myFileName.split('.').join('-' + Date.now() + '.');

然后您得到的结果是'image-1559753269107.png'