Javascript:为FileReader readAsBinaryString准备图像对象
我目前正在关注从javascript向Google Drive上传图像的问题。该示例代码非常有效,因为您可以选择一个文件从硬盘上传。我现在正试图修改它,以便它以标准HTML格式上载页面上已显示的图像: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
<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;iatob
已经返回的结果相同?