Skip to content

前端文件处理

文件预览

前端可预览的文件类型:

  • 图片/视频/音频:直接用 img/video/audio 标签
  • PDF:iframe 或 pdf.js
  • Office 文档:微软 Office Online 预览。⚠️ 注意文档 URL 必须公网可访问,切勿用于内网或机密文档
  • 文本/代码:pre 标签或 Monaco Editor 只读模式

Blob 对象

Blob 表示不可变的二进制数据。常用于:文件下载(URL.createObjectURL + a[download])、图片预览(FileReader.readAsDataURL)、大文件分片上传(Blob.slice())。

图片预加载

js
const preloadImage = (url) => new Promise((resolve, reject) => {
  const img = new Image(); img.onload = () => resolve(img); img.onerror = reject; img.src = url;
});
// 批量预加载并显示进度
urls.forEach(url => preloadImage(url).then(() => { loaded++; }));

html-to-image / html2canvas

html-to-image(推荐): 使用 SVG foreignObject 渲染 DOM 为图片。 import { toPng } from 'html-to-image';

html2canvas: 使用 Canvas 手动绘制 DOM,兼容性更好但可能丢失样式。不支持 object-fit: cover(需手动裁切),跨域图片需 useCORS: true。

jsPDF + html2canvas 生成 PDF

js
const canvas = await html2canvas(element);
const pdf = new jsPDF();
pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, pdf.internal.pageSize.getWidth(), 0);
pdf.save('download.pdf');

视频首帧缩略图

七牛云使用 vframe API:视频URL?vframe/jpg/offset/1 即可获取首帧。

Released under the MIT License.