You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Angular实现文件上传并在控制台输出多格式文件数据

浏览器端上传后解析docx/pptx/pdf并输出到控制台的实现方案

浏览器本身没有提供这三类二进制格式的原生解析API,核心实现思路是引入前端专用解析库,将上传获取的文件二进制流转换为可读文本/结构化数据后,输出到控制台即可。

通用前置上传逻辑

你可以复用已有的txt文件上传监听逻辑,先统一获取上传的File对象:

const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  if (!file) return;
  const fileExt = file.name.split('.').pop().toLowerCase();

  // 原有TXT解析逻辑
  if (fileExt === 'txt') {
    const txtContent = await file.text();
    console.log('TXT文件内容:', txtContent);
    return;
  }

  // 其他格式分支调度
  switch(fileExt) {
    case 'docx':
      await parseDocx(file);
      break;
    case 'pptx':
      await parsePptx(file);
      break;
    case 'pdf':
      await parsePdf(file);
      break;
    default:
      console.log('不支持的文件格式');
  }
})

各格式专属解析实现

  • docx格式

使用mammoth.js纯前端库完成解析,可直接提取docx的纯文本内容:

async function parseDocx(file) {
  const fileBuffer = await file.arrayBuffer();
  const parseResult = await mammoth.extractRawText({ arrayBuffer: fileBuffer });
  console.log('DOCX文件内容:', parseResult.value);
  if (parseResult.messages.length > 0) {
    console.warn('DOCX解析警告:', parseResult.messages);
  }
}
  • pptx格式

使用pptx2json库解析,可获取到每页PPT的文本、样式、结构等数据:

async function parsePptx(file) {
  const fileBuffer = await file.arrayBuffer();
  const parser = new Pptx2Json();
  const pptContent = await parser.parse(fileBuffer);
  console.log('PPTX文件结构化内容:', pptContent);
  // 如需只输出纯文本,可遍历slides字段提取所有text字段拼接即可
}
  • pdf格式

使用官方维护的pdf.js库解析,可逐页提取PDF文本内容:

// 需提前配置pdf.js的worker路径,CDN引入时直接对应配置即可
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdf.worker.min.js';

async function parsePdf(file) {
  const fileBuffer = await file.arrayBuffer();
  const pdfDoc = await pdfjsLib.getDocument({ data: fileBuffer }).promise;
  const fullPdfText = [];

  for (let pageNum = 1; pageNum <= pdfDoc.numPages; pageNum++) {
    const page = await pdfDoc.getPage(pageNum);
    const textContent = await page.getTextContent();
    const pageText = textContent.items.map(item => item.str).join(' ');
    fullPdfText.push(`第${pageNum}页:${pageText}`);
  }

  console.log('PDF文件内容:\n', fullPdfText.join('\n'));
}

补充说明

  • 上述所有解析库都支持CDN直接引入,无打包工具的原生前端项目也可直接使用
  • 大文件解析可能存在数秒延迟,可根据需要添加加载状态提示
  • 如果你只需要输出文件元数据(大小、修改时间、MIME类型等),不需要引入第三方库,直接打印File对象即可查看

内容的提问来源于stack exchange,提问作者nikhil eswar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:27:01