收藏
回答

readFile读取的ArrayBuffer无法上传OSS

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug FileSystemManager.readFile 微信iOS客户端 8.0.56 3.7.12

https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html

问题描述:在浏览器端选择的文件、文件转ArrayBuffer可以正常上传,小程序这边选中的文件、文件转ArrayBuffer无法上传到alioss,想请问下小程序选中的文件、readFile读取的ArrayBuffer与浏览器那边的格式不一样吗?

import OSS from 'ali-oss'

const client = new OSS({
  // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: stsCredentials.value.region,
  authorizationV4: true,
  // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
  accessKeyId: stsCredentials.value.sts.AccessKeyId,
  accessKeySecret: stsCredentials.value.sts.AccessKeySecret,
  // 从STS服务获取的安全令牌(SecurityToken)。
  stsToken: stsCredentials.value.sts.SecurityToken,
  // 填写Bucket名称,例如examplebucket。
  bucket: stsCredentials.value.bucket,
})

const options = {
  // 获取分片上传进度、断点和返回值。
  progress: (p, cpt, res) => {
    console.log(p)
  },
  // 设置并发上传的分片数量。
  parallel: 4,
  // 设置分片大小。默认值为1 MB,最小值为100 KB,最大值为5 GB。最后一个分片的大小允许小于100 KB。
  partSize: 1024 * 1024,
  // headers,
  // 自定义元数据,通过HeadObject接口可以获取Object的元数据。
  // meta: { year: 2020, people: "test" },
  mime: 'multipart/form-data',
}

wx.chooseMedia({
  count: 1, // 限制选择1个文件
  mediaType: ['video'], // 只允许选择视频
  maxDuration: 60, // 限制视频最大时长
  success(res: any) {
    console.log('video', res)
    const videoFile = res.tempFiles[0]
    const videoFormat = videoFile.tempFilePath.split('.').pop()
    const name = userStore.userInfo.agent_id + '/video/' + generateUUID() + '.' + videoFormat

    const fs = wx.getFileSystemManager()
    fs.readFile({
      filePath: videoFile.tempFilePath,
      position: 0,
      async success(res) {
        console.log('读取的数据', res.data)
        const data = res.data

        const resData = await client.multipartUpload(name, data, {
          ...options,
        })
        console.log(resData)
      },
      fail(res) {
        console.error(res)
      },
    })
  },
})
回答关注问题邀请回答
收藏

1 个回答

  • Kassady
    Kassady
    03-28

    阿里云的人说SDK引用支持浏览器和NodeJS环境,不确定小程序能否使用,所以还是先别用这种直接引入ali-oss的方法了,最好让后端或者nodejs写个接口中转一下分片上传

    03-28
    有用
    回复
登录 后发表内容