请教高手!本人欲上传EXCEL文件至数据库,在两个页面wxml中,用一个按钮实现上传。在两个页面中的button 事件都是一样的,代码也是复制粘贴的,肯定没错。而后,调用同一个云函数。但是出现了怪事,一个页面的button可以如实实现上传成功,但另外一个(后创建的)却一直不成功,控制台打印如下,以为是env环境变量没有设置好,后来增加了云函数中的env环境变量,还是一个页面的按钮可以实现上传一个不可以,不能上传的控制台打印如下结果,是否有高手能帮忙答疑解惑,可能哪里存在问题?
js. 代码:本次保证是复制贴在两个JS文件中代码一直,且DATA变量和其他配置也一样。
uploadVBYFWGQ() {
let that = this
wx.chooseMessageFile({
count: 1,
type: 'file',
success(res) {
// tempFilePath可以作为img标签的src属性显示图片
const tempFilePaths = res.tempFiles[0].path
console.log("选择excel文件成功", res.tempFiles)
wx.cloud.uploadFile({
cloudPath: new Date().getTime() + ".xlsx",
filePath: tempFilePaths, // 文件路径
success: res => {
// get resource ID
console.log("上传后的res", res)
console.log("上传成功", res.fileID)
that.jiexi(res.fileID)
},
fail: err => {
// handle error
console.log("上传失败")
}
})
}
})
},
jiexi(fileId) {
wx.cloud.callFunction({
name: "exceluploadbywhs",
data: {
fileID: fileId,
dbname: "VolumeBalance-YFWGQ"
},
success(res) {
console.log("解析并上传成功", res)
console.log("fileID", fileId)
},
fail(err) {
console.log("解析失败", err)
}
})
},
云函数段代码:两个事件都调用这个云函数。难道云函数被调用还存在先来后到的潜规则?
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env:"booking-87t85",
})
var xlsx = require('node-xlsx');
const db = cloud.database()
exports.main = async(event, context) => {
let {
fileID
} = event
//1,通过fileID下载云存储里的excel文件
const res = await cloud.downloadFile({
fileID: fileID,
})
const buffer = res.fileContent
const tasks = [] //用来存储所有的添加数据操作
//2,解析excel文件里的数据
var sheets = xlsx.parse(buffer); //获取到所有sheets
sheets.forEach(function(sheet) {
console.log(sheet['name']);
for (var rowId in sheet['data']) {
console.log(rowId);
var row = sheet['data'][rowId]; //第几行数据
if (rowId > 0 && row) { //第一行是表格标题,所有我们要从第2行开始读
//3,把解析到的数据存到excelList数据表里
const promise = db.collection('SO_DB')
.add({
data: {
BookingDate: row[0], //ETD
ShipmentID: row[1], //进仓编号
ShipperName: row[2], //供应商名字
Volume: row[3],//立方
UploadDate:new Date().toLocaleDateString()
}
})
tasks.push(promise)
}
}
});
// 等待所有数据添加完成
let result = await Promise.all(tasks).then(res => {
return res
}).catch(function(err) {
return err
})
return result
}