适用于前端工程化的项目
类模式
class CustomFile {
private readonly file: File;
/**
* 构造函数,接受一个 File 对象作为参数
* @param file 要封装的文件
*/
constructor(file: File) {
this.file = file;
}
/**
* 获取文件大小,返回一个数字,表示文件的字节数
*/
getSize(): number {
return this.file.size;
}
/**
* 获取文件名,返回一个字符串,表示文件的名称
*/
getName(): string {
return this.file.name;
}
/**
* 获取文件后缀,返回一个字符串,表示文件的后缀名(不包括点号)
*/
getExtension(): string {
const extension = this.getName().split('.').pop();
return extension ? extension.toLowerCase() : '';
}
/**
* 获取文件类型,返回一个字符串,表示文件的 MIME 类型
*/
getType(): string {
return this.file.type;
}
/**
* 获取文件 MIME,返回一个字符串,表示文件的 MIME 类型。
* 如果文件类型不是图片,则返回 `application/{extension}` 格式的 MIME 类型,
* 其中 `{extension}` 是文件后缀。
*/
getMime(): string {
const type = this.getType();
const extension = this.getExtension();
switch (type) {
case 'image/jpeg':
return 'image/jpeg';
case 'image/png':
return 'image/png';
default:
return extension ? `application/${extension}` : '';
}
}
/**
* 格式化文件大小,返回一个字符串,表示文件大小的可读格式,例如 `1.23 MB`
*/
getFormattedSize(): string {
const size = this.getSize();
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let index = 0;
while (size >= 1024 && index < units.length - 1) {
size /= 1024;
index++;
}
return `${size.toFixed(2)} ${units[index]}`;
}
/**
* 检查文件是否是特定后缀
* @param extension 要检查的后缀名(不包括点号)
* @returns 如果文件后缀与指定后缀相同(不区分大小写),则返回 `true`,否则返回 `false`
*/
hasExtension(extension: string): boolean {
return this.getExtension() === extension.toLowerCase();
}
}
工具类模式
/**
* 获取文件大小,返回一个数字,表示文件的字节数
* @param file 要获取大小的文件
*/
export function getFileSize(file: File): number {
return file.size;
}
/**
* 获取文件名,返回一个字符串,表示文件的名称
* @param file 要获取名称的文件
*/
export function getFileName(file: File): string {
return file.name;
}
/**
* 获取文件后缀,返回一个字符串,表示文件的后缀名(不包括点号)
* @param file 要获取后缀的文件
*/
export function getFileExtension(file: File): string {
const extension = file.name.split('.').pop();
return extension ? extension.toLowerCase() : '';
}
/**
* 获取文件类型,返回一个字符串,表示文件的 MIME 类型
* @param file 要获取类型的文件
*/
export function getFileType(file: File): string {
return file.type;
}
/**
* 获取文件 MIME,返回一个字符串,表示文件的 MIME 类型。
* 如果文件类型不是图片,则返回 `application/{extension}` 格式的 MIME 类型,
* 其中 `{extension}` 是文件后缀。
* @param file 要获取 MIME 的文件
*/
export function getFileMime(file: File): string {
const type = getFileType(file);
const extension = getFileExtension(file);
switch (type) {
case 'image/jpeg':
return 'image/jpeg';
case 'image/png':
return 'image/png';
default:
return extension ? `application/${extension}` : '';
}
}
/**
* 格式化文件大小,返回一个字符串,表示文件大小的可读格式,例如 `1.23 MB`
* @param size 文件大小,单位为字节
*/
export function formatFileSize(size: number): string {
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let index = 0;
while (size >= 1024 && index < units.length - 1) {
size /= 1024;
index++;
}
return `${size.toFixed(2)} ${units[index]}`;
}
/**
* 检查文件是否是特定后缀
* @param file 要检查后缀的文件
* @param extension 要检查的后缀名(不包括点号)
* @returns 如果文件后缀与指定后缀相同(不区分大小写),则返回 `true`,否则返回 `false`
*/
export function hasFileExtension(file: File, extension: string): boolean {
return getFileExtension(file) === extension.toLowerCase();
}
JS 版本
function getFileSize(file) {
return file.size;
}
function getFileName(file) {
return file.name;
}
function getFileExtension(file) {
const extension = file.name.split('.').pop();
return extension ? extension.toLowerCase() : '';
}
function getFileType(file) {
return file.type;
}
function getFileMime(file) {
const type = getFileType(file);
const extension = getFileExtension(file);
switch (type) {
case 'image/jpeg':
return 'image/jpeg';
case 'image/png':
return 'image/png';
default:
return extension ? `application/${extension}` : '';
}
}
function formatFileSize(size) {
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let index = 0;
while (size >= 1024 && index < units.length - 1) {
size /= 1024;
index++;
}
return `${size.toFixed(2)} ${units[index]}`;
}
function hasFileExtension(file, extension) {
return getFileExtension(file) === extension.toLowerCase();
}
module.exports = {
getFileSize,
getFileName,
getFileExtension,
getFileType,
getFileMime,
formatFileSize,
hasFileExtension,
};