html文件上传添加额外参数,FormData上传文件同时附带其他参数,后台node接收

本文介绍了如何在HTML中利用FormData上传文件,并在上传过程中添加额外参数,如'mapType'。JavaScript部分展示了使用jQuery和FormData实现文件上传的代码。后端使用Node.js和'formidable'库接收文件,'node-xlsx'库解析Excel文件。如果文件类型正确,服务器将返回解析后的数据;否则,返回错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.html部分,选择文件(excel为例)

2.js中上传文件部分,主要用到的是jequery和FormData

var formData = new FormData($('#uploadForm')[0]);

formData.append("mapType", "baidu");

$.ajax({

url: '/upload/order',

type: 'POST',

data: formData,

processData: false, // 告诉jquery不要处理发送的数据

contentType: false // 告诉jquery不要设置content-Type请求头

}).done(function (res) {

}).fail(function (res) {

console.log("失败");

});

3.后台node接收部分,解析excel用的是"node-xlsx"

const express = require('express');

const fs = require('fs');

const formidable = require('formidable');

const xlsx = require('node-xlsx');

const router = express.Router();

router.post('/order', (req, res) => {

console.log(' ########## POST /upload ####### ');

let fileTypeError = false;

const targetPath = `${__dirname}/upload`;

const form = new formidable.IncomingForm();

form.encoding = 'utf-8';

form.keepExtensions = true;

form.maxFieldsSize = 10 * 1024 * 1024;

form.uploadDir = targetPath;

const files = [];

const fields = [];

let mapType = 'gaode';

form.on('field', (field, value) => { // 上传的相关参数("mapType", "baidu")

if (field === 'mapType')mapType = value;

fields.push([field, value]);

});

form.on('file', (field, file) => { // 接收文件触发

console.log(`upload file: ${file.name}`);

// 判断文件类型是否是xlsx

if (file.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {

fileTypeError = true;

}

files.push([field, file]);

});

form.on('end', () => {

// 遍历上传文件

let fileName = '';

let obj = '';

const folderExists = fs.existsSync(targetPath);

if (folderExists) {

const dirList = fs.readdirSync(targetPath);

dirList.forEach(async (item) => {

if (!fs.statSync(`${targetPath}/${item}`).isDirectory()) {

console.log(`parse item:${targetPath}/${item}`);

fileName = `${targetPath}/${item}`;

if (!fileTypeError) {

// 解析excel

obj = xlsx.parse(fileName, {

cellDates: true

});

console.log(JSON.stringify(obj));

res.send({

code: 10000,

msg: '成功解析数据',

resOrders: resOrderObjs

});

} else {

res.send({

code: 20003,

msg: '文件格式不正确'

});

}

fs.unlinkSync(fileName); // delete file

}

});

} else {

res.send({

rtnCode: '1',

rtnInfo: '系统错误'

});

}

});

form.on('error', (err) => {

res.send({

rtnCode: '1',

rtnInfo: '上传出错'

});

});

form.on('aborted', () => {

res.send({

rtnCode: '1',

rtnInfo: '放弃上传'

});

});

form.parse(req);

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值