摘要:部分,选择文件为例中上传文件部分,主要用到的是和告诉不要处理发送的数据告诉不要设置请求头失败后台接收部分解析用的是上传的相关参数接收文件触发判断文件类型是否是遍历上传文件解析成功解析数据文件格式不正确系统错误上传出错放弃上传参考链接
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);
});
参考链接:
http://www.cnblogs.com/lyr121...
https://lipeishang.github.io/...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91940.html
摘要:今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表。我的思路是首先,只上传附件照片,这个直接看的官方例子就行,不仅仅上传附件照片,还同时上传其他参数。然后,再做上传照片和文件,上传其他参数,其实也就是文件合并。 今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表。 我的思路是: 首先,只上传附件照片,这个直接看ele的官方例子就行,不仅仅上传...
摘要:网址功能单图多图上传图片上传预览上传进度条分组上传,分组查询新建分组,删除分组删除图片选择图片目录结构前端利用搭建,中引入子组件。实现分组的新增查询删除。利用模块实现删除文件功能。 公司要写一些为自身业务量身定制的的组件,要基于Vue,写完后扩展了一下功能,选择写图片上传是因为自己之前一直对这个功能比较迷糊,所以这次好好了解了一下。演示在网址打开后的show.gif中。 使用技术:Vu...
摘要:实现多图上传主要用到以下两个属性是自带多图上传的,但是细心的朋友可能发现默认多图的实现可能和我们预期有些出入,有截图可以看出,实质是进行多次请求在上传事件触发后,多图上传的默认实现调用了三次请求。 前言 工作中碰到需要多图上传,在使用element-ui解决过程中碰到一些问题,在这里分享给大家。 环境: Springboot+Vue+Element-ui 正文 这次上传使用的是Elem...
摘要:前言本期的主题是在中如何实现文件上传。文件上传解决方案目前比较主流的解决方案就是表单或者和表单来实现。文件上传解决方案表单利用表单组件进行文件上传是远古时期就一直在用的方法而且还真经久不衰,厉害了。 终于抽出时间来继续更新自己的博客,最近忙得够呛...对于该系列博客不知道大家有没有这样的看法,对于React常见的基础东西并没有过多或者详细列出,感觉有点不符合系列标题。的确,笔者一开始也...
摘要:网上很多文件切片上传的文章看了很多最终自己总结了下主要思路如下需要实现的功能前端多文件上传前端文件切片并命名文件同步上传切片同步上传后端接受切片并根据文件名称保存至文件夹后端判断是否是最后一个切片合并切片用到的技术文件切片切片上传请求参数 网上很多文件切片上传的文章, 看了很多, 最终自己总结了下, 主要思路如下: 1. 需要实现的功能 前端多文件上传 前端文件切片, 并命名uuid...
阅读 1628·2023-04-26 00:20
阅读 1245·2023-04-25 21:49
阅读 883·2021-09-22 15:52
阅读 665·2021-09-07 10:16
阅读 1043·2021-08-18 10:22
阅读 2739·2019-08-30 14:07
阅读 2311·2019-08-30 14:00
阅读 2738·2019-08-30 13:00