微信小程序上传大文件
-
微信小程序内部文件处理都要经由api, uniapp开发api文档, 微信官方api文档
-
上传小于10m的普通文件,可以使用wx.uploadFile, 超出大小会无响应超时
uni.uploadFile({ url, // 自己的后端接口地址 filePath: path, // 微信返回的tempurl name: name, // 文件唯一标识 formData: { name, phone }, // 自定义传输的数据 success (res){}, fail (error) {} })
-
上传大于10m的文件,必须使用微信的官方依赖库
miniprogram-file-uploader
, 下载dist/uploader.js文件,直接引用即可, 需要分2个接口处理, 微信官方文档// import Uploader from 'miniprogram-file-uploader' import Uploader from './uploader.js' if (Uploader.isSupport()) { const uploader = new Uploader({ tempFilePath, // 微信返回的tempurl totalSize: chunkSize, // 文件大小 uploadUrl: '/upload_chunk', // 上传分片的接口 mergeUrl: '/merge_chunk', // 合并分片的接口 query: { phone, name } // 自定义传参 }) uploader.upload() // 成功或失败都会触发 uploader.on('complete', (res) => { console.log('upload complete', res) }) // 文件上传成功 uploader.on('success', (res) => { console.log('upload success', res) }) // 文件上传失败 uploader.on('fail', (res) => { console.log('fail', res) }) // 文件进度变化 uploader.on('progress', (res) => { console.log("TCL: chunkUpload -> res", res) // this.setData({ // progress: res.progress, // uploadedSize: parseInt(res.uploadedSize / 1024), // averageSpeed: parseInt(res.averageSpeed / 1000), // timeRemaining: res.timeRemaining // }) })
-
可能的另一种方案???? 需要验证=====通过api获取二进制数据,切片后使用常规请求进行发送, 要设置
application/octet-stream
? ??? 但是wx.request不支持同时发送二进制文件和其他数据wx.getFileSystemManager().readFile({ filePath: filePath, encoding: 'binary', // 指定编码为二进制 success: (res) => { const binaryData = res.data wx.request({ url, method: 'POST', data: res.data, // 将二进制数据作为请求体的数据部分 header: { 'Content-Type': 'application/octet-stream' // 设置请求头为二进制数据类型 }, success: (response) => { console.log('上传成功', response.data); }, fail: (error) => { console.error('上传失败', error); } }); }, fail: (error) => { console.error('读取文件失败', error); } });