Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:为FileReader readAsBinaryString准备图像对象_Javascript_Google App Engine_Google Drive Api_Filereader - Fatal编程技术网

Javascript:为FileReader readAsBinaryString准备图像对象

Javascript:为FileReader readAsBinaryString准备图像对象,javascript,google-app-engine,google-drive-api,filereader,Javascript,Google App Engine,Google Drive Api,Filereader,我目前正在关注从javascript向Google Drive上传图像的问题。该示例代码非常有效,因为您可以选择一个文件从硬盘上传。我现在正试图修改它,以便它以标准HTML格式上载页面上已显示的图像: <img class="image" id="result-image" src="imgres?img_id={{result_id}}" alt="No Image"/> 然后由FileReader对象读取,如下所示: var fileData = evt.target.file

我目前正在关注从javascript向Google Drive上传图像的问题。该示例代码非常有效,因为您可以选择一个文件从硬盘上传。我现在正试图修改它,以便它以标准HTML格式上载页面上已显示的图像:

<img class="image" id="result-image" src="imgres?img_id={{result_id}}" alt="No Image"/>
然后由FileReader对象读取,如下所示:

var fileData = evt.target.files[0];
    var reader = new FileReader();
    reader.readAsBinaryString(fileData);
    reader.onload = function(e) {
    ...
    var img = document.getElementById('result-image');
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    var dataUrl = canvas.toDataURL('image/png');
    var blob = dataUriToBlob(dataUrl);
    var reader = new FileReader();
    reader.readAsBinaryString(blob);
    reader.onload = function(e) {
    ...
我的问题是如何为FileReader readAsBinaryString方法提供所需类型的image object标记,以便驱动器API调用能够成功?提前谢谢

固定使用如下:

var fileData = evt.target.files[0];
    var reader = new FileReader();
    reader.readAsBinaryString(fileData);
    reader.onload = function(e) {
    ...
    var img = document.getElementById('result-image');
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    var dataUrl = canvas.toDataURL('image/png');
    var blob = dataUriToBlob(dataUrl);
    var reader = new FileReader();
    reader.readAsBinaryString(blob);
    reader.onload = function(e) {
    ...
使用dataUriToBlob方法:

function dataUriToBlob(dataURI) {
    // serialize the base64/URLEncoded data
    var byteString;
    if (dataURI.split(',')[0].indexOf('base64') >= 0) {
        byteString = atob(dataURI.split(',')[1]);
    }
    else {
        byteString = unescape(dataURI.split(',')[1]);
    }

    // parse the mime type
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]

    // construct a Blob of the image data
    var array = [];
    for(var i = 0; i < byteString.length; i++) {
        array.push(byteString.charCodeAt(i));
    }
    return new Blob(
        [new Uint8Array(array)],
        {type: mimeString}
    );
}
函数dataUriToBlob(dataURI){ //序列化base64/URLEncoded数据 var-byteString; if(dataURI.split(',')[0].indexOf('base64')>=0){ byteString=atob(dataURI.split(',)[1]); } 否则{ byteString=unescape(dataURI.split(',)[1]); } //解析mime类型 var mimeString=dataURI.split(',')[0]。split(':')[1]。split(';')[0] //构造图像数据的Blob var数组=[]; for(var i=0;i为什么要创建一个Blob,然后使用reader获取其二进制字符串?结果是否与
atob
已经返回的结果相同?