仅使用 javascript 中的文件名获取文件扩展名

Get file extention using only file name in javascript

我正在创建一个将图像发送到聊天中的 discord 机器人(无关紧要)。用户可以键入图像的名称而无需键入文件扩展名。问题是机器人不知道文件扩展名是什么,所以如果图片是 .jpg 而程序期望的是 .png,它就会崩溃。有没有办法让程序不需要文件扩展名来打开文件?

let image = imageName;
message.channel.send({ files: [`media/stickers/${imageName}.png`] });

只有少数已知的图像扩展名,如 jpg、png、gif、jpeg。也许尝试获取具有最佳猜测扩展名的文件,如果它抛出异常,请尝试下一种格式。

很遗憾,需要文件扩展名。你知道 file.mp4file.mp3 是完全不同的。

但是,您可以使用 try-except 和 for 循环来获取正确的文件!

我建议:

let image = imageName;
let extensions = [".png", ".jpg", "gif"] // All the extensions you can think of 
const pass = () => {}
for (const extension of extensions) {
  try {
     message.channel.send({ files: [`media/stickers/${imageName}${extension}`] }); // successfully get file and send
     break
  } catch(error) {
     pass() // do nothing, and go back to the loop and test other extension
  }
}

我以前没试过,我是一名 Python 程序员。但我希望你能明白。

使用 fs - 特别是 fs 的 Promise 版本,使这变得非常简单

import { readdir } from 'fs/promises';


const getFullname = async (path, target)  => 
    (await readdir(path))
    .find(file => 
        file === target || file.split('.').slice(0,-1).join('.') === target
    );
try {
    const actualName = await getExtension('media/stickers', imageName);
    if (!actualName) {
        throw `File ${imageName} not found`;
    }
    message.channel.send({ files: [`media/stickers/${actualName}`] });
} catch(error) {
    // handle your errors here
}

您可以传入带或不带扩展名的名称,它会被发现 - 注意,这不区分大小写...所以 XYZ 不会匹配 xyz.jpg - 很容易更改如果你需要不区分大小写