【问题标题】:Error:Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded错误:无法在“窗口”上执行“atob”:要解码的字符串未正确编码
【发布时间】:2016-09-14 12:50:10
【问题描述】:

这是我的 Javascript 代码

function upload(){
var byteCharacters = atob($scope.image1.compressed.dataURL.replace(/^data:image\(png|jpg);base64,/,''));
var byteNumbers = new Array(byteCharacters.length);
         for (var i = 0; i < byteCharacters.length; i++) {
          byteNumbers[i] = byteCharacters.charCodeAt(i);
         }
var byteArray = new Uint8Array(byteNumbers);
 var blob = new Blob([ byteArray ], {
     type : undefined
   });

这是我的 HTML

<div class="form-group text-16px" style="margin-top: 20px !important;">
    <label>Choose Material Photo : </label>
    <div>
    <input id="materialImage" type="file" accept="image/*" image="image1" resize-max-height="800" resize-max-width="800" resize-quality="0.7" resize-type="image/jpg" file-model="file" name="materialImage" onChange="checkFile()" ng-image-compress/>
    <div id="choose-image-compresser">
      <div image="image1" result-image="myCompressedImage"></div>
      </div>
    <img ng-src="{{image1.compressed.dataURL}}" />
        <span id="image-size-error" style="color:red;" hidden=""><small>Image size is too large</small></span>
    </div>
</div>

我遇到错误

Error: Failed to execute 'atob' on 'Window': 要解码的字符串 编码不正确

【问题讨论】:

  • 在我的控制器中 var byteCharacters = atob($scope.image1.compressed.dataURL.replace(/^data:image\/(png|jpg);base64,/,'')); var byteNumbers = new Array(byteCharacters.length);
  • 我的 html 代码是
  • 可能重复的问题,检查这里stackoverflow.com/questions/22578530/…
  • 请检查我在控制器中使用图像压缩的代码
  • @ARJUN 请检查​​我的代码并理解我的问题。请不要给我负分。请检查我的代码。我花了4天。而且我找不到合适的解决方案。

标签: html angularjs


【解决方案1】:

我遇到了问题。它应该有助于其他用户保存图像并使用 javascript(AnguarJs) 压缩图像。

我正在流此链接以压缩图像 Github

https://github.com/oukan/angular-image-compress

var imageData = $scope.image1.compressed.dataURL.toString();
var byteCharacters = atob(imageData.replace(/^data:image\/(png|jpeg|jpg);base64,/, ''));
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
  byteNumbers[i] = byteCharacters.charCodeAt(i);
}

var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([ byteArray ], {
   type : undefined
});

【讨论】:

  • 谢谢!这行得通。使用笔记本电脑相机拍照时出现此错误。更改替换字符串对我有用。
  • @JagdishChopde:欢迎 >(* _*)
【解决方案2】:

检查您的代码后,您似乎有可能不支持的字符。 Check screenshot 如果这不起作用,请确保您尝试上传的文件的名称已编码为您的数据库或设置支持的名称。

这是没有这些字符的代码:

var byteCharacters = atob($scope.image1.compressed.dataURL.replace(/^data:image\/(png|jpg);base64,/,'')); var byteNumbers = new Array(byteCharacters.length);

【讨论】:

  • var byteCharacters = atob($scope.image1.compressed.dataURL.replace(/^data:image\/(png|jpg);base64,/,'')); var byteNumbers = new Array(byteCharacters.length); for (var i = 0; i
  • @VedPrakash 您似乎有编码问题。在我复制你之后,我注意到它的一部分不是 UTF-8 编码的。这可能是原因。这部分准确地说是“ /^data:image\/‌​(png|jpg);base64,/,'‌​' ”我删除了那些不可见的字符,所以它应该是好的。这是新代码:var byteCharacters = atob($scope.image1.compressed.dataURL.replace(/^data:image\/(png|jpg);base64,/,''));
  • #Earl :- 代码不工作。我还是有同样的问题
  • var byteCharacters = atob(imageData.replace(/^data:image\/(png|jpg|jpeg);base64,/, '')); ***我添加了 jpeg,我的任何问题都已解决。
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2014-04-29
  • 2017-06-11
  • 1970-01-01
  • 2018-12-14
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多