之前的beforeUpload直接返回一个false值 ,文件是可以正常与服务端进行传输的
beforeUpload: (file) => {
return false
},
但是这样并不能阻止文件上传,看了官方文档后,改用返回promise对象上传
beforeUpload: (file) => {
console.log('-beforeUploadfile========', file)
return new Promise(async (resolve, reject) => {
importExcel(file).then(res => {
let list = res[0].data // 去除表头
list.splice(0, 1)
list.splice(list.length - 1, 1)
let reslist = _.cloneDeep(list)
reslist.forEach((item, index) => {
// 如果数据中有空字段,删除此条数据
item.forEach(eItem => {
if (!eItem.cont) { // 如果三项中一其值为空即删除
// reslist.splice(index, 1)
result = false
}
})
})
// 如果数据已有此条数据,删除此条数据
let arr = changeplan.permatmac.person;
arr.forEach((item) => {
for (let i = reslist.length - 1; i >= 0; i--) {
const ele = reslist[i]
if (item.name === ele[0].cont) {
// reslist.splice(i, 1);
result = false
}
}
})
if (!result) {
message.warning('导入文件不合法!可能包含空白字段与重复数据!')
return false
}
resolve();
return true;
})
})
// return false
},
我们发现 ,现在可以阻止上传了,但是传给服务端的文件不是二进制的,而变成了一个object,所以报错了
然后尝试把这个object转换成二进制流,发现依然报错
let formData = toformdata({
file: new Blob([JSON.stringify(fileList[0])])
});
再后来又仔细阅读了文档 ,发现了这段,于是尝试在resolve时把对象返回去,依然报错……
resolve(file)
再看到最后,一开始没理解 这个originFileObj是啥,打印了一下info.file.originFileObj,发现这就是我们想要的那个file文件
onChange: (file) => {
console.log('onChange-file', file)
// console.log('file.file.originFileObj', file.file.originFileObj)
setfileList([file.file]); // 这是beforeUpload返回false值时所用到的赋值
console.log('onchenage', fileList)
},
所以我们直接把info.file.originFileObj赋值给filelist就好了……
onChange: (file) => {
console.log('onChange-file', file)
console.log('file.file.originFileObj', file.file.originFileObj)
setfileList([file.file.originFileObj]);
console.log('onchenage', fileList)
},
真无语,一个版本问题,解决了一上午,尝试各种办法,结果人家文档里写了……
贴一下完整代码吧哈哈哈哈
const uploadprops = {
multiple: false,
accept: '.xlsx',
onChange: (file) => {
console.log('onChange-file', file)
console.log('file.file.originFileObj', file.file.originFileObj)
setfileList([file.file.originFileObj]);
console.log('onchenage', fileList)
},
onRemove: (file) => {
const index = fileList.indexOf(file);
const newFileList = fileList.slice();
newFileList.splice(index, 1);
setfileList(newFileList);
},
beforeUpload: (file) => {
console.log('-beforeUploadfile========', file)
return new Promise(async (resolve, reject) => {
importExcel(file).then(res => {
let list = res[0].data // 去除表头
list.splice(0, 1)
list.splice(list.length - 1, 1)
let reslist = _.cloneDeep(list)
reslist.forEach((item, index) => {
// 如果数据中有空字段,删除此条数据
item.forEach(eItem => {
if (!eItem.cont) { // 如果三项中一其值为空即删除
// reslist.splice(index, 1)
result = false
}
})
})
// 如果数据已有此条数据,删除此条数据
let arr = changeplan.permatmac.person;
arr.forEach((item) => {
for (let i = reslist.length - 1; i >= 0; i--) {
const ele = reslist[i]
if (item.name === ele[0].cont) {
// reslist.splice(i, 1);
result = false
}
}
})
if (!result) {
message.warning('导入文件不合法!可能包含空白字段与重复数据!')
return false
}
resolve();
return true;
})
})
// return false
},
fileList,
}; // 上传组件的配置参数