文档中心
探索 DWeb 框架的无限可能,构建下一代高性能 Web 应用
文件工具
提供文件处理相关工具函数,包括文件读取、保存、类型判断等功能。
环境兼容性
所有文件工具函数仅在浏览器环境可用,依赖 File API 和 Blob API。在服务端环境调用会抛出异常。
快速开始
Code
import { readFile, saveFile, getFileExtension, isImageFile } from "@dreamer/dweb/utils/file";
// 读取文件
const file = input.files[0];
const text = await readFile(file);
// 保存文件到本地
const blob = await fetch('/api/file').then(r => r.blob());
saveFile(blob, 'document.pdf');
// 获取文件扩展名
const ext = getFileExtension('image.jpg'); // 'jpg'
// 判断文件类型
if (isImageFile(file)) {
// 处理图片
}文件读取
读取文件为文本
将文件读取为文本字符串。
Code
import { readFile, readFileAsDataUrl, readFileAsArrayBuffer } from "@dreamer/dweb/utils/file";
// 读取文件为文本
const file = input.files[0];
const text = await readFile(file);
// 读取文件为 Data URL
const dataUrl = await readFileAsDataUrl(file);
img.src = dataUrl; // 可以直接用作图片源
// 读取文件为 ArrayBuffer
const buffer = await readFileAsArrayBuffer(file);文件保存
保存文件到本地
在浏览器中将 Blob 或字符串保存为文件。
Code
import { saveFile } from "@dreamer/dweb/utils/file";
// 从 Blob 保存
const blob = new Blob(['Hello World'], { type: 'text/plain' });
saveFile(blob, 'hello.txt');
// 从 URL 下载后保存
const response = await fetch('/api/file');
const blob = await response.blob();
saveFile(blob, 'document.pdf');文件信息
Code
import { getFileExtension, getFileName, getFileSize } from "@dreamer/dweb/utils/file";
getFileExtension('document.pdf'); // 'pdf'
getFileExtension('image.JPG'); // 'jpg'
getFileExtension('file'); // ''
getFileName('document.pdf'); // 'document'
getFileName('path/to/image.jpg'); // 'image'
const file = input.files[0];
const size = getFileSize(file);
console.log(`文件大小: ${size} 字节`);文件类型判断
Code
import { isImageFile, isVideoFile, isAudioFile } from "@dreamer/dweb/utils/file";
const file = input.files[0];
// 判断是否为图片
if (isImageFile(file)) {
// 处理图片
}
// 判断是否为视频
if (isVideoFile(file)) {
// 处理视频
}
// 判断是否为音频
if (isAudioFile(file)) {
// 处理音频
}
// 也可以使用文件名判断
if (isImageFile('image.jpg')) {
// 处理图片
}图片压缩
压缩图片
在浏览器中压缩图片文件,支持设置最大宽度、最大高度和质量。
Code
import { compressImage } from "@dreamer/dweb/utils/file";
const file = input.files[0];
const compressed = await compressImage(file, {
maxWidth: 1920, // 最大宽度
maxHeight: 1080, // 最大高度
quality: 0.8, // 压缩质量 0-1
mimeType: 'image/jpeg', // 输出格式
});
// 上传压缩后的图片
await uploadFile(compressed);文件创建
创建文件对象
从数据创建 File 或 Blob 对象。
Code
import { createFile } from "@dreamer/dweb/utils/file";
// 从字符串创建
const file = createFile('Hello World', 'hello.txt', 'text/plain');
// 从 ArrayBuffer 创建
const buffer = new ArrayBuffer(8);
const file2 = createFile(buffer, 'data.bin');MIME 类型
获取 MIME 类型
根据文件扩展名获取对应的 MIME 类型。
Code
import { getMimeType } from "@dreamer/dweb/utils/file";
getMimeType('image.jpg'); // 'image/jpeg'
getMimeType('document.pdf'); // 'application/pdf'
getMimeType('video.mp4'); // 'video/mp4'
getMimeType('unknown.xyz'); // 'application/octet-stream'完整示例
Code
import {
readFileAsDataUrl,
compressImage,
isImageFile,
getFileExtension,
saveFile,
} from "@dreamer/dweb/utils/file";
// 处理文件上传
const handleFileUpload = async (file: File) => {
// 检查文件类型
if (!isImageFile(file)) {
alert('请上传图片文件');
return;
}
// 检查文件大小
if (file.size > 5 * 1024 * 1024) {
// 大于 5MB,进行压缩
const compressed = await compressImage(file, {
maxWidth: 1920,
maxHeight: 1080,
quality: 0.8,
});
// 上传压缩后的图片
await uploadFile(compressed);
} else {
// 直接上传
await uploadFile(file);
}
};
// 预览图片
const previewImage = async (file: File) => {
const dataUrl = await readFileAsDataUrl(file);
imgElement.src = dataUrl;
};
// 保存文件
const saveReport = async () => {
const response = await fetch('/api/report');
const blob = await response.blob();
saveFile(blob, 'report.pdf');
};API 参考
Code
// 文件读取
- readFile(file) - 读取文件为文本
- readFileAsDataUrl(file) - 读取文件为 Data URL
- readFileAsArrayBuffer(file) - 读取文件为 ArrayBuffer
// 文件保存
- saveFile(blob, filename) - 保存文件到本地
// 文件信息
- getFileExtension(filename) - 获取文件扩展名
- getFileName(filename) - 获取文件名(不含扩展名)
- getFileSize(file) - 获取文件大小
// 文件类型判断
- isImageFile(file) - 判断是否为图片文件
- isVideoFile(file) - 判断是否为视频文件
- isAudioFile(file) - 判断是否为音频文件
// 图片压缩
- compressImage(file, options?) - 压缩图片
// 文件创建
- createFile(data, filename, mimeType?) - 创建文件对象
// MIME 类型
- getMimeType(filename) - 获取 MIME 类型