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

Vue项目中如何读取public目录下的xlsx文件?

浏览器环境读取public目录下XLSX文件的可行方案

浏览器端不允许直接通过文件路径读取服务器public目录的文件,XLSX.readFile()是Node.js环境专属API,在浏览器中调用必然触发权限报错。以下是两种可行的实现方式:

方式一:通过Fetch API获取静态资源后解析

将XLSX文件作为前端静态资源,通过HTTP请求获取后转为ArrayBuffer解析,这是浏览器环境最通用的方案:

async handleFile() {
  try {
    // 确保路径可通过HTTP访问:public目录下的文件直接写相对/绝对路径,地址栏输入该路径需能正常访问文件
    const response = await fetch('/xlsx/quiztemplate.xlsx');
    const arrayBuffer = await response.arrayBuffer();
    const workbook = XLSX.read(arrayBuffer, { type: 'array' });
    
    const firstSheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[firstSheetName];
    const excelData = XLSX.utils.sheet_to_json(worksheet);
    console.log(excelData);
  } catch (error) {
    console.error('读取文件失败:', error);
  }
}

方式二:用户手动上传文件(业务允许时)

如果允许用户自行上传测验模板,可通过文件输入框接收文件,再用FileReader解析:

<input type="file" accept=".xlsx" id="quizTemplateInput">
document.getElementById('quizTemplateInput').addEventListener('change', async (e) => {
  const file = e.target.files[0];
  if (!file) return;
  
  const arrayBuffer = await file.arrayBuffer();
  const workbook = XLSX.read(arrayBuffer, { type: 'array' });
  
  const firstSheetName = workbook.SheetNames[0];
  const worksheet = workbook.Sheets[firstSheetName];
  const excelData = XLSX.utils.sheet_to_json(worksheet);
  console.log(excelData);
});

关键注意事项

  • 验证目标文件路径的可访问性:在浏览器地址栏输入文件路径,需能正常下载或预览文件,否则会导致请求失败
  • 浏览器环境下优先使用XLSX.read()配合arrayBuffer类型解析,避免使用Node.js文件系统相关API
  • 若部署时存在路由重写规则,需确保静态文件请求不会被后端路由拦截

内容的提问来源于stack exchange,提问作者guilhem saint-gaudin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:04