使用Javascript动态创建图像文件

使用Javascript动态创建图像文件,javascript,jquery,image,amazon-s3,Javascript,Jquery,Image,Amazon S3,我试图根据从S3 Bucket检索到的内容动态创建一个图像文件。CORS工作正常,以下是我编写的代码: /** *@name获取文件 *@desc获取所需文件,并将其添加到我们的_filesPending数组中,然后更新对话框进程 *@author cgervais */ var_filesPending=[]; var{u fileMessageDialog=“当前正在下载{{numberOfFiles}}}视频…”; var _filesdownloatedsofar=0; var _=[

我试图根据从S3 Bucket检索到的内容动态创建一个图像文件。CORS工作正常,以下是我编写的代码:

/**
*@name获取文件
*@desc获取所需文件,并将其添加到我们的_filesPending数组中,然后更新对话框进程
*@author cgervais
*/
var_filesPending=[];
var{u fileMessageDialog=“当前正在下载{{numberOfFiles}}}视频…”;
var _filesdownloatedsofar=0;
var _=[];
var=false;
函数下载(响应,文件名){
var responsePerfect={
链接:函数(){
var\u tmpResponse=JSON.parse(响应);
返回\u tmpResponse.location;
}
};
$.ajax({
键入:“获取”,
url:responsePerfect.link(),
数据:{},
成功:功能(答案){
var\u tmpFileObject={
fUrl:fileName,
fContent:btoa(unescape(encodeURIComponent(answer.trim()))
};
_文件下载.push(_tmpFileObject);
_filesdowloadedsofar=\u filesdowloadedsofar+1;
log('download--have:'+\u filesDownloadedSoFar);
},
错误:功能(响应、错误代码、错误消息){
console.log(“[OKDownload]”+response+'-'+errorCode+'-'+errorMessage+'/'+responsePerfect.link);
}
})
}
var _alreadyGeneratedStrings=[];
函数生成器原因解析字符串(最小值、最大值、fnMax){
var_genStringSeed=Date.now()+10;
var_randomString='';
var text=“”;
var-mablue=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”;
对于(变量i=min;ifnMax){
_randomString=\u randomString.substring(0,fnMax);
}
如果(_-AlreadyGeneratedStrings.indexOf(_-randomString)>-1){u-randomString=generateReasonableString(min,max,fnMax);}
_alreadyGeneratedStrings.push(_randomString);
返回随机字符串;
}
函数httpRawFetch(链接){
var matched=generateReasonableString(8,26,8)+“.jpg”;
$.ajax({
键入:“获取”,
url:link.href+“&rawlink=yes”,
数据:{},
成功:功能(答案){
if(answer==“”){console.log('[httpRawFetch]无法获取'+link);return;}
下载(答案,匹配);
},
错误:功能(响应、错误代码、错误消息){
log(“[httpRawFetch]从后端服务器获取JSON数据时出错。”);
日志('[DEBUG]'+响应+'-'+错误代码+'-'+错误消息);
log(“[DEBUG]链接:”+Link);
}
})
}
函数generatedownloadmodel(){
var_tmpHTML;
//@TODO:使用jQuery生成端模式
}
函数下载完成(){
var zip=newjszip();
var_runningcountofiles=0;
var _runningAddFiles=true;
对于(变量i=0;i<\u.length;i++){
_runningAddFiles=true;
//zip创建文件(文件名、文件内容)
zip.file(_filesDownloaded[i].full,decodeURIComponent(escape(atob(_filesDownloaded[i].fContent)));
_runningCountOfFiles++;
}
var recInterval=setInterval(函数(){
如果(_runningAddFiles&&_runningCountOfFiles==_filesdownload.length | | u runningCountOfFiles>_filesdownload.length){
generateAsync({type:“blob”})
.然后(功能(内容){
saveAs(content,“recordings.zip”);
_runningAddFiles=false;
清除间隔(再间隔);
});
}
}, 1000);
}
setInterval(函数(){
如有需要(下载){
if(_filesDownloadedSoFar===_filesDownloaded.length){
下载完成();
下载=假;
}
}
}, 60000);
函数获取文件(链接){
如果(链接==“”){
警报('无法下载此文件');
返回;
}
_filesPending.push(链接);
httpRawFetch(link);
下载=真;
}