Illegal Constructor错误:在Cordova上将Base64转换为Blob失败

时间:2016-05-20 10:33:46

标签: javascript android angularjs cordova blob

我想使用AngularJS将我的Base64图像转换为我的cordova应用程序项目中的blob,但我一直收到Illegal构造函数错误。我尝试了很多在线提供的解决方案,但似乎都没有。任何帮助表示赞赏。

var imageElement = angular.element(document.querySelector('#profileImg'));
var imageURI = dataURIToBlobURI(imageElement.attr('src'));

 function dataURIToBlobURI(dataURI) {
    // convert base64 to raw binary data held in a string
    // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
    var byteString = atob(dataURI.split(',')[1]);

    // separate out the mime component
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]

    // write the bytes of the string to an ArrayBuffer
    var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(ab);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }

    var bb = new Blob([ab], {type: 'image/png'});
    return bb;
  }

我一直在这里遇到错误new Blob([ab], {type: 'image/png'}),似乎并不知道如何让它发挥作用。只有当应用在Android或iOS中时才会在Chrome中查看。

我尝试过以下但是都无济于事。

var bb = new Blob(ab);
var bb = new Blob([ab]);
var bb = new Blob(dataURI); 

谢谢

2 个答案:

答案 0 :(得分:1)

金斯利!可能的,您可以重现错误的设备实际上不支持Blob。实际上你可以用两种方式:

首先,检查一下 polyfill或smth类似于解决您的问题。它允许您使用Blob作为构造函数。

其次,您可以使用除Blob之外的BlobBuilder。下面的小例子,

var bb = new BlobBuilder();
bb.append('blob content');
var blob = bb.getBlob('text/plain');

答案 1 :(得分:0)

我用它来解决我的问题。只是因为任何人遇到这个问题。所有解决方案在我的设备上都不起作用。只需按照说明添加javascript文件即可。 https://github.com/blueimp/JavaScript-Canvas-to-Blob

var b64Data = 'R0lGODdhUAA8AIABAAAAAP///ywAAAAAUAA8AAACS4SPqcvtD6' +
        'OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofE' +
        'ovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5PKsAAA7',
    imageUrl = 'data:image/gif;base64,' + b64Data,
    blob = window.dataURLtoBlob && window.dataURLtoBlob(imageUrl);