七牛使用base64图片的形式上传,查看七牛原文,对其上传代码使用axios的进行了实现。

function qiniuUploadBase64 (dataUrl, saveKey = '', isFullName = false) {
  let baseStr = dataUrl.split(',')[1]

  const eqTagIndex = baseStr.indexOf('=')
  const baseSizeStr = eqTagIndex !== -1 ? baseStr.substring(0, eqTagIndex) : baseStr
  const strLen = baseSizeStr.length
  const fileSize = parseInt(strLen - (strLen / 8) * 2, 10) // fileSize 可直接写为 -1,省去计算步骤

  return axios
    .post(`https://upload.qiniup.com/putb64/${fileSize}/key/${btoa(makeSaveKey(saveKey, isFullName))}`, baseStr, {
      headers: {
        'Content-Type': 'application/octet-stream',
        Authorization: 'UpToken ' + mkToken(saveKey, isFullName)
      }
    })
}

有两点需要注意

  • fileSize 设置为 -1 其实更为方便
  • post请求的url中,携带了key参数,这样能保证覆盖上传而不返回错误

标签: none

添加新评论