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

前端通过POST传XML文件至Node.js后端,需实现XML转JSON

解决方案:接收XML文件并转换为JSON

问题根源

你当前通过前端发送Blob URL到后端的方式不可行,因为blob:协议的URL仅在前端浏览器环境内有效,后端服务器无法直接访问这个地址获取文件内容。必须修改前端的文件发送逻辑,直接传递文件本身而非Blob URL。


步骤1:修改前端文件发送逻辑

将文件通过FormData对象发送,这是处理文件上传的标准方式:

// 假设files是从<input type="file">获取的File对象数组
const formData = new FormData();
files.forEach(file => {
  formData.append('xmlFiles', file); // 键名xmlFiles可自定义,后端对应即可
});

// 用fetch发送请求(也可用axios)
fetch('api.com/sendfiles', {
  method: 'POST',
  body: formData
})
.then(res => res.json())
.catch(err => console.error(err));

步骤2:后端配置文件接收

使用multer中间件处理文件上传(先安装:npm install multer):

const express = require('express');
const multer = require('multer');
const app = express();

// 配置multer,临时存储上传的文件(小文件用内存存储,大文件建议用磁盘存储)
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 接收POST请求,处理多文件上传
app.post('/sendfiles', upload.array('xmlFiles'), async (req, res) => {
  try {
    // req.files就是上传的文件数组,每个文件包含buffer、originalname等属性
    const xmlFiles = req.files;
    const results = await Promise.all(xmlFiles.map(file => convertXmlToJson(file.buffer)));
    
    res.json({ success: true, data: results });
  } catch (err) {
    res.status(500).json({ success: false, error: err.message });
  }
});

步骤3:XML转JSON

使用xml2js库解析XML(先安装:npm install xml2js):

const xml2js = require('xml2js');
const parser = new xml2js.Parser({ explicitArray: false, trim: true }); // 按需调整解析选项

async function convertXmlToJson(xmlBuffer) {
  const xmlString = xmlBuffer.toString('utf8');
  return new Promise((resolve, reject) => {
    parser.parseString(xmlString, (err, result) => {
      if (err) reject(err);
      else resolve(result);
    });
  });
}

补充说明

  • 如果必须保留原前端发送Blob的逻辑,可在前端先将Blob转换为Base64字符串再发送,后端解码后处理,但FormData方式更高效可靠。
  • xml2js的解析选项可根据你的XML结构调整,比如explicitArray控制是否强制将单元素转为数组,按需配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:31:35