nodejs 强大的更改文件名与时间戳

nodejs formidable change filename with timestamp

我在互联网上进行了搜索,但没有找到解决方案。 我使用 Nodejs Formidable 来处理上传的文件并将其保存到我的 API.

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

这是我使用的代码:

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

任何人都可以就此提出解决方案吗...拜托?

你的意思是:
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

根据文档,您可以更改 formidable 用来保存上传的文件名。

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

file.path = null

The path this file is being written to. You can modify this in the 'fileBegin' event in case you are unhappy with the way formidable generates a temporary path for your files.

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

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

我找到了解决方案:-) 首先需要路径: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     
});

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

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

然后你得到结果'image-1559753269107.png'