javascript - 将 Blob 字符串 URL 转换为 Blob,然后转换为 base64

标签 javascript jquery asp.net-mvc base64 bloburls

我有一个图像元素,我从中获取 blob 字符串 URL,我尝试先将其转换为 blob,然后再转换为 base64 字符串。这样我就可以将base64字符串(存储在#originalImage中)发送到服务器端。

JS

            onFinished: function (event, currentIndex) {
            var form = $(this);

            if ($('#image').attr('src').length) {
                var selectedFile = $('#image').attr('src');
                var blob;
                var reader = new window.FileReader();
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if (this.readyState == 4 && this.status == 200) {
                        blob = this.response;
                        console.log(this.response, typeof this.response);
                        if (blob != undefined) {
                            reader.readAsDataURL(blob);
                        }
                    }
                }
                xhr.open('GET', selectedFile);
                xhr.responseType = 'blob';
                xhr.send();


            }
            reader.onloadend = function () {
                base64data = reader.result;
                console.log(base64data);
                if (base64data != undefined) {
                    $("#originalImage").val(base64data);
                    form.submit();
                }

            }

        }

Controller

        [HttpPost]
        public ActionResult Action(Model blah, string croppedImage, string originalImage){
              // Code here...
         }

它按预期工作,但我唯一关心的是我在 reader.onloadend 内提交表单的位置。这种方法有什么问题或者有比这更好的方法吗?

非常感谢您对此的帮助,谢谢!

最佳答案

不使用base64,将二进制文件发送到服务器,节省时间、进程、内存和带宽

onFinished(event, currentIndex) {
  let src = $('#image').attr('src')

  if (src.length) {
    fetch(src)
    .then(res => 
      res.ok && res.blob().then(blob =>
        fetch(uploadUrl, {method: 'post', body: blob})
      )
    )
  }
}

您还可以使用 Canvas 并避免另一个请求(但这会将所有图像转换为 png)

onFinished(event, currentIndex) {
  let img = $('#image')[0]
  if (!img.src) return

  let canvas = document.createElement('canvas')
  let ctx = canvas.getContext('2d')
  canvas.width = img.width
  canvas.height = img.height
  ctx.drawImage(img, 0, 0)
  canvas.toBlob(blob => {
    fetch(uploadUrl, {method: 'post', body: blob})
  })
}

关于javascript - 将 Blob 字符串 URL 转换为 Blob,然后转换为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40606720/

相关文章:

javascript - 将 REST API 用于 Discord 机器人

javascript - 无法覆盖 CSS 伪元素 :before

javascript - 重新启动一个 jquery 函数

javascript - 在哪里可以找到 JavaScript 文档?

javascript - 在 javascript 中提高 10 的幂,有没有比这更好的方法

javascript - 在这种情况下如何使用 GAS 进行字典化?

ajax - 当我访问 Tickets.com json api 时,未捕获语法错误 : Unexpected token : ,

c# - telerik mvc 站点地图性能

asp.net-mvc - ASP.Net MVC : Request. IsAuthenticated 在成功登录后变为 false

javascript - 使用 jquery 将数据绑定(bind)到 div 时在其中一列中添加链接