Node.js获取文件扩展名

geo*_*per 171 javascript file-type node.js

我在node.js中使用express 3创建文件上传功能.

我想抓取图像的文件扩展名.所以我可以重命名该文件,然后将文件扩展名附加到它.

app.post('/upload', function(req, res, next) {
    var is = fs.createReadStream(req.files.upload.path),
        fileExt = '', // I want to get the extension of the image here
        os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Run Code Online (Sandbox Code Playgroud)

如何在node.js中获取图像的扩展名?

Sno*_*ish 402

我相信您可以执行以下操作来获取文件名的扩展名.

var path = require('path')

path.extname('index.html')
// returns
'.html'
Run Code Online (Sandbox Code Playgroud)

  • 要小心,它只会抓取最后一个点后的字符,所以像'app.css.gz`这样的文件名只返回`.gz`而不是`.css.gz`,这可能是也可能不是你的想. (48认同)
  • 在这种情况下,只需使用`filename.split('.').pop();` (16认同)
  • @AamirAfridi只返回没有`.`的相同字符串. (11认同)
  • 尝试''filename.css.gz'.split('.').slice(1).join('.')`来获取_all_扩展名 (10认同)
  • 通常,扩展名是最后一个.因为当我们期待更多时,比如tar.gz.最好检查一下它是否存在.以正则表达式为例."tar.gz $"或通过构建一个能够做到这一点的函数.比如从最后检查并返回并查看它是否完全匹配.你将拥有检查扩展名的功能.**为什么?因为像`jone.lastTest.654654556.tar.gz`这样的文件,预期的扩展名是tar.gz,但是如果你应用任何形成第一个点的函数,它将无法工作,你可以看到** (9认同)

die*_*ump 32

更新

由于原始答案,extname()已添加到path模块中,请参阅Snowfish的答案

原始答案:

我正在使用此函数来获取文件扩展名,因为我没有找到一种方法以更简单的方式执行此操作(但我认为有):

function getExtension(filename) {
    var ext = path.extname(filename||'').split('.');
    return ext[ext.length - 1];
}
Run Code Online (Sandbox Code Playgroud)

你必须要求'路径'才能使用它.

另一种不使用路径模块的方法:

function getExtension(filename) {
    var i = filename.lastIndexOf('.');
    return (i < 0) ? '' : filename.substr(i);
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该真正使用路径模块,就像@Snowfish的回答所指出的那样,而不是自己编写.更多信息:http://nodejs.org/api/path.html#path_path_extname_p (6认同)
  • 是的,有效.只是想到使用节点会有一种更简单的方法.这就是我所做的:`var is = fs.createReadStream(req.files.upload.path),fileType = is.path.split(/ [.] + /).pop();` (4认同)

Kam*_*rul 18

// you can send full url here
function getExtension(filename) {
    return filename.split('.').pop();
}
Run Code Online (Sandbox Code Playgroud)

如果您使用快速,请在配置中间件(bodyParser)时添加以下行

app.use(express.bodyParser({ keepExtensions: true}));
Run Code Online (Sandbox Code Playgroud)


ale*_*son 11

该解决方案支持查询字符串!

var Url = require('url');
var Path = require('path');

var url = 'http://i.imgur.com/Mvv4bx8.jpg?querystring=true';
var result = Path.extname(Url.parse(url).pathname); // '.jpg'
Run Code Online (Sandbox Code Playgroud)


mag*_*ker 10

使用该substr()方法代替split()&更高效pop()

看看这里的性能差异:http://jsperf.com/remove-first-character-from-string

// returns: 'html'
var path = require('path');
path.extname('index.html').substr(1);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


ns1*_*s16 9

例如,您可以使用path.parse(path)

const path = require('path');
const { ext } = path.parse('/home/user/dir/file.txt');
Run Code Online (Sandbox Code Playgroud)


smi*_*ham 6

一个简单的解决方案,无需解决多周期扩展问题的需求:

var filename = 'file.with.long.extension';
var ext = filename.substring(filename.indexOf('.')); 
//ext = '.with.long.extension'
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想要前导点:

var filename = 'file.with.long.extension';
var ext = filename.substring(filename.indexOf('.')+1); 
//ext = 'with.long.extension'
Run Code Online (Sandbox Code Playgroud)

确保测试该文件也有扩展名.


小智 6

import extname 以返回文件的扩展名:

import { extname } from 'path';
extname(file.originalname);
Run Code Online (Sandbox Code Playgroud)

其中 file 是表单的文件“名称”