开发者社区> 问答> 正文

javascript oss put base64 出现图片格式损坏

已解决

···javascript
function (base64) {

      self.editor.focus()
      console.log(base64)

      let base = window.atob(base64.replace(/^.*?,/, ''))
      console.log(base)

      getOssSts().then(response => {
        let client = new OSS.Wrapper({
          accessKeyId: response.data.AccessKeyId,
          accessKeySecret: response.data.AccessKeySecret,
          stsToken: response.data.SecurityToken,
          endpoint: process.env.ENDPOINT,
          bucket: process.env.BUCKET
        })
        client.put(self.objectKey, new Buffer(base)).then(function (result) {
          self.onUploadSuccess(result.res)
          console.log(result)
        }).catch(function (err) {
          console.log(err)
        })
        console.log(response)
      })
    })

展开
收起
呆呆大笨熊 2017-11-29 17:56:25 4873 0
2 条回答
写回答
取消 提交回答
  • 采纳回答

    https://yq.aliyun.com/articles/253170?spm=5176.100240.searchblog.9.8tMWIb 参考这篇文章

    // Convert a base-64 string to a byte array

      base64ToBytes (base64) {
        // Use browser-native function if it exists
        if (typeof atob === 'function') return this.stringToBytes(window.atob(base64))
        // Remove non-base-64 characters
        base64 = base64.replace(/[^A-Z0-9+/]/ig, '')
        var bytes = []
        for (var i = 0; i < base64.length; i++) {
          switch (i % 4) {
            case 1:
              bytes.push((base64map.indexOf(base64.charAt(i - 1)) << 2) |
                (base64map.indexOf(base64.charAt(i)) >>> 4))
              break
            case 2:
              bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0xF) << 4) |
                (base64map.indexOf(base64.charAt(i)) >>> 2))
              break
            case 3:
              bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & 0x3) << 6) |
                (base64map.indexOf(base64.charAt(i))))
              break
          }
        }
        return bytes
      },
      stringToBytes (str) {
        var bytes = []
        for (var i = 0; i < str.length; i++) {
          bytes.push(str.charCodeAt(i))
        }
        return bytes
      }
    

    一定要转成base64ToBytes

    2019-07-17 21:46:05
    赞同 展开评论 打赏
  • 老哥 base64map 是什么啊??? 同样的问题,急急急急

    2019-07-17 21:46:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载