前端通过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
相关产品推荐
相关产品推荐

