仅使用 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.mp4
和 file.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
- 很容易更改如果你需要不区分大小写
我正在创建一个将图像发送到聊天中的 discord 机器人(无关紧要)。用户可以键入图像的名称而无需键入文件扩展名。问题是机器人不知道文件扩展名是什么,所以如果图片是 .jpg 而程序期望的是 .png,它就会崩溃。有没有办法让程序不需要文件扩展名来打开文件?
let image = imageName;
message.channel.send({ files: [`media/stickers/${imageName}.png`] });
只有少数已知的图像扩展名,如 jpg、png、gif、jpeg。也许尝试获取具有最佳猜测扩展名的文件,如果它抛出异常,请尝试下一种格式。
很遗憾,需要文件扩展名。你知道 file.mp4
和 file.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
- 很容易更改如果你需要不区分大小写