微信小程序上传大文件

xzz2021
发布于 2024-11-08 / 9 阅读
0
0

微信小程序上传大文件

微信小程序上传大文件

  1. 微信小程序内部文件处理都要经由api, uniapp开发api文档, 微信官方api文档

  2. 上传小于10m的普通文件,可以使用wx.uploadFile, 超出大小会无响应超时

    uni.uploadFile({
            url, // 自己的后端接口地址
            filePath: path, // 微信返回的tempurl
            name: name, // 文件唯一标识
            formData: { name, phone },  // 自定义传输的数据
            success (res){},
            fail (error) {}
          })
    
  3. 上传大于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
            // })
          })
    
  4. 可能的另一种方案???? 需要验证=====通过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);
            }
       });
    

评论