官方文档提供两种方法支持上传csv/json数据到云数据,分别是在云开发控制台和使用HTTP API的方式上传csv/json文件到云数据库,另外我们还可以通过自己编写云函数的方法上传excel文件到云数据,下边我们将分别介绍着三种方法。

一、使用云控制台上传csv/json数据到云数据库

要导入数据,需打开云开发控制台,切换到 “数据库” 标签页,并选择要导入数据的集合,点击 “导入” 按钮,需要注意只支持csv和json格式的数据导入,需要注意的是jJSON 数据不是数组,而是类似 JSON Lines,即各个记录对象之间使用 \n 分隔,而非逗号,具体格式如下图所示,但是此种导入方式存在一些问题,比如说如果json格式或者csv文件格式有误,他会导入一部分数据到数据库之后才报错,不是很好控制,无法实现全导入或者全不导入的要求。

二、 自己编写函数导入excel数据导入数据库

实现思路:选择文件-----------上传文件到云存储---------返回fileID--------------调用云函数将云存储中的文件内容插入到云数据库,选择文件使用choosemessagefile,上传使用uploadfile方法,都没有难度,下边我们贴一下将excel文件写入到云数据库的云函数内容:

// 云函数入口文件,引入需要的模块
// 编写的代码将excel文件的内容插入到云数据库
const cloud = require('wx-server-sdk');
cloud.init({env: '你的云环境ID'
})const db = cloud.database();
var xlsx = require('node-xlsx');
//在此处最好初始化一些云环境,防止多个云环境时产生冲突// 云函数入口函数
exports.main = async(event, context) => {console.log("云函数调用成功")//通过event获取到调用云函数的函数传递过来的参数let fileID = event.fileIDconsole.log("传递过来的fileID为", fileID)//通过获取到的文件ID下载位于云存储的数据const res = await cloud.downloadFile({fileID: fileID,})const buffer = res.fileContent;//用来存储所有的添加数据操作const tasks = []var sheets = xlsx.parse(buffer);sheets.forEach(function(sheet) {for (var rowId in sheet['data']) {var row = sheet['data'][rowId]; //第几行数据if (rowId > 0 && row) { //第一行是表格标题,所有我们要从第2行开始读//3,把解析到的数据存到excelList数据表里const promise =  db.collection('test').add({data: {date: row[0], //姓名name: row[1], //年龄phone: row[2], //地址expressNo: row[3] //wechat}})tasks.push(promise)}}});// 等待所有数据添加完成let result = await Promise.all(tasks).then(res => {return res}).catch(function (err) {return err})return result}

通过这种方法可以将excel直接上传到云数据库,但是这种方式也有弊端,第一云函数的调用时间有限;第二当数据较多时会出现数据库连接超数量的情况,第三 无法实现事务插入,会出现插入一部分然后才报错的情况,由于JS功底有限,如果能控制并发量的话导入excel到云数据库时是否会有好的表现。

三、使用HTTP API的方式插入CSV/JSON数据到云数据库。

首先该API使服务端API,也就是说无法在小程序端进行request调用,官方是这么解释的:

access_token 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以过 getAccessToken 接口获取并进行妥善保存。为了 access_token 的安全性,后端 API 不能直接在小程序内通过 wx.request 调用即 api.weixin.qq.com 不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取 access_token,并调用相关 API;

https://api.weixin.qq.com/tcb/databasemigrateimport?access_token=ACCESS_TOKEN

虽说我们不能再小程序端进行调用,但是我们可以从云函数调用该HTTP API,该API的数据请求示例如下:

{"env": "qbasetest-a5c40e","collection_name": "test1","file_path":"test_import","file_type":1,"stop_on_error": false,"conflict_mode": 2
}

需要注意的是,env是你的云开发环境ID,file_path为云存储中待上传的存储位置,注意不要加上/,file_type为文件类型,1是json文件,2是csv文件,根据你上传的文件格式进行定义。

基本思路:选择文件----上传文件(定义文件位置及名称)------获取token-----------将token及上边的数据请求示例的内容交给调用该http api的云函数,云函数执行操作后将csv/json文件写到云数据库。

小程序端的JS:

/* 1.导入csv文件到云存储,然后调用云函数,云函数中调用http api把云存储中的csv文件导入到数据库*/
Page({data: {file_path: "expressList.csv",access_token: "",fileID: ""},//1.第一步首先使用wx.chooseMessageFile选择需要上传的文件chooseExcel() {wx.showLoading({title: '请稍后',})let that = thiswx.chooseMessageFile({count: 1,type: 'file',success(res) {let path = res.tempFiles[0].path;console.log("选择excel成功", path);// 调用函数上传刚才选择的数据that.uploadExcel(path)},fail(res) {wx.hideLoading();console.log("选择文件失败", res);wx.showToast({title: '选择文件失败',})}})},//2.第二步上传刚才选择的文件。async uploadExcel(path) {let that = thisawait wx.cloud.uploadFile({cloudPath: that.data.file_path,filePath: path,success: res => {console.log("上传文件成功", res.fileID);that.setData({fileID: res.fileID})that.upcsv()},fail: err => {wx.hideLoading({complete: (res) => {},})wx.showToast({title: '上传文件失败',})console.log("上传失败", err)}})},async upcsv() {let that = thisawait wx.cloud.callFunction({name: "getToken",success(res) {console.log(res)that.setData({access_token: JSON.parse(res.result).access_token})//that.csvToDB(that.data.access_token)// console.log("accessToken的值",that.data.accessToken)},fail(res){wx.hideLoading({complete: (res) => {},})console.log("getToken云函数失败",res)}})},// 调用云函数,从云函数使用http api 上传csv/json文件到数据库async csvToDB(access_token) {let that = thiswx.cloud.callFunction({name: "csvToDB",data: {access_token:that.data.access_token,//将access_token作为参数传递给云函数},success(res) {console.log(res)wx.hideLoading({complete: (res) => {},})wx.showToast({title: 'csv上传成功',})},fail(res){wx.hideLoading({complete: (res) => {},})wx.showToast({icon:none,title: 'csv上传失败',})console.log("云函数csvToDB失败",res)}})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},})

获取access_token的云函数js:

// 云函数入口文件
const cloud = require('wx-server-sdk')
const got = require('got')
cloud.init({// API 调用都保持和云函数当前所在环境一致env:cloud.DYNAMIC_CURRENT_ENV}
)// 云函数入口函数
exports.main = async (event, context) => {let res = await got('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的app秘钥')return res.body
}

调用databaseMigrateImport HTTP API的云函数JS:

const cloud = require('wx-server-sdk')
// var request = require('request')
var request = require('request-promise');
cloud.init({// API 调用都保持和云函数当前所在环境一致env: cloud.DYNAMIC_CURRENT_ENV
})// 云函数入口函数
exports.main = async (event, context) => {let access_token = event.access_tokenlet options = {method: 'POST',url: "https://api.weixin.qq.com/tcb/databasemigrateimport?access_token="+access_token,body: {"env": "zybxsd-tijht","collection_name": "test","file_path": "expressList.csv","file_type": 2,"stop_on_error": false,"conflict_mode": 2},json:true
}
let res = await request(options)
return res}

在这里需要注意的是,在request-promise在请求时,将databaseMigrateImport HTTP API的数据请求示例参数写在body里面,这个地方的expressList.csv指的是该api回去云存储中找名为expressList.csv文件写到test数据库里面,由于我选择的是导入csv文件,因此此处的file_type为2,测试该API表现性能良好,4000条数据导入时间大约在3秒左右(加上上传文件到数据库以及获取token的时间),如果有错误时不会将部分数据导入到数据库,性能良好,满足应用要求。

微信小程序上传EXCE/CSV/JSON文件到数据库相关推荐

  1. 微信小程序上传阿里云视频文件流程及代码

    为了微信小程序客服端实现自拍视频能够分享给多个好友,我们需要把小程序自拍的视频存储到服务器,而阿里云在性能和速度上比较不错,所以我们选择了阿里云作服务器. 第一步.微信小程序项目创建 1. 到http ...

  2. uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能. 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseI ...

  3. 微信小程序上传Excel文本文件功能

    问题: 在开发过程中会发现微信小程序有很多功能都还不能满足我们的需求,谁叫客户就是上帝呢,前几天小编遇到了这么个问题,就是用微信小程序上传文件,但是还以为微信带有这个模块,可是查了许久还是没有找到,只 ...

  4. 微信小程序上传文件到自己的服务器

    微信小程序上传文件到自己的服务器 1.建立 WebApi项目 (1)创建项目 (2)发布项目 2.后端接口代码 3.小程序端调接口 1.建立 WebApi项目 (1)创建项目 选择菜单 "文 ...

  5. 微信小程序上传文件400

    微信小程序上传文件400 直接上示例问题代码 将请求头添加上Host即可解决 直接上示例问题代码 wx.uploadFile({url: 'https://' + domain + '/post/up ...

  6. 微信小程序上传文件组件

    微信小程序上传文件 一.说明 该拍照组件带有微信授权相机功能,会结合后端接口,将上传的图片以数组集合的形式传值给父级页面. 注意:组件适用于,单独上传图片,不携带参数,结合后端接口返回路径之后,再调用 ...

  7. 小程序 php转excel,做微信小程序上传数据 数据格式?-微信 上传数据 生成excle

    做微信小程序上传数据 数据格式? 建议找人专门制作设计好,专业的事情交给专业的人做,自己浪费时间还不一定能搞好 如何把微信里的excel传到qq上 1.在手机中先箭头所示的"微信" ...

  8. 微信小程序上传文件到阿里OSS教程

    前言 (一)开通OSS服务与新建Bucket 开通OSS服务这里省略,新建bucket. (二)设置Bucket属性,后台配置域名 上传文件访问域名 这里我们要在小程序后台配置上传域名(上面的域名是我 ...

  9. 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决

    目录 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 2.请求的域名没有配置 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 ...

最新文章

  1. 用记事本解决js中文乱码问题
  2. StoreFront 2.5让XenDesktop和XenApp如虎添翼
  3. Micropython教程之TPYBoard开发板DIY智能温控小风扇(萝卜学科编程教育)
  4. 如何检测Safari,Chrome,IE,Firefox和Opera浏览器?
  5. 下拉框处理(select)
  6. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
  7. Adobe Acrobat Reader快捷键
  8. 开始复习下sql,常用SQL语句示例(一)
  9. c语言行列倒置算法,循环行列的元素倒置。求指点
  10. 日常使用Git,这些问题你遇到过吗?
  11. Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/core
  12. 【HDOJ 2020.09.29】一些语法水题ByVJ
  13. 应用层TCP三次握手及各种协议简介telnet【笔记】
  14. poi 读取word标题_【转载】poi读取word文档
  15. 诺基亚n1系统更新显示无网络_曾经世界第一大手机系统,诺基亚塞班系统竟还活着!你用过吗?...
  16. ​ZMC运动控制器SCARA机械手应用快速入门
  17. 最小项标准式和卡诺图化简
  18. PS学习笔记(88天和我一起学会PS)(8/88)
  19. OKR实施细则(转)
  20. 拉姆达表达式 集合操作

热门文章

  1. 常用m3u8,rtsp,rtmp,flv,mp4直播流在线测试地址
  2. 如何利用ewomail搭建邮件服务器
  3. 布袋除尘器过滤风速多少_布袋除尘器过滤风速的选择!
  4. PHP:【微信小程序】初识微信小程序,微信小程序配置
  5. Python一行代码能做什么,30个实用案例代码详解
  6. 轩小陌的Python笔记-day08 模块一总结
  7. (转贴) 《超越自己》
  8. C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解
  9. AD_PCB 快捷键
  10. plc输出类型有哪些?