GAS

2017-12-02 14 views
-1

을 사용하여 사이드 바에서 zip 파일을 다운로드하려면 프로세스가 완료되면 (드라이브 서비스를 사용하지 않고) 파일 다운로드를 실행하고 싶습니다.GAS

클라이언트가 인코딩 된 데이터를 iframe 내에로드하는 클라이언트로 인코딩 된 데이터를 다시 보냅니다 (mime이 zip으로 다운로드를 트리거하기 때문에).

그러나 데이터가 클 경우 우편 번호를 다운로드 할 수 없습니다.

나는

Code.gs와

//zipBlob = some zipped binary data 
return { 
        'contents': "data:application/zip;base64, " + Utilities.base64Encode(zipBlob.getAs("application/zip").getBytes()) 
       }; 

HTML 사이드 바

if (typeof d === 'object') { 
     if (d.contents) 
      window.open("aboutblank", "Preview").document.write('<head><style>body{margin:0}</style></head><iframe id="iframe" src="' + d.contents + '" scrolling="auto" frameborder="0px" marginheight="0px" marginwidth="0px" height="100%" width="100%"></iframe>'); 
    } 

답변

0
내가 대답을 발견

을 시도

download("export."+d.ext, d.contents) 

var download=function(c,b){var a=document.createElement("a"),d=dataURLtoBlob(b);a.setAttribute("href",URL.createObjectURL(d));a.setAttribute("download",c);a.style.display="none";document.body.appendChild(a);a.click();var e;a.addEventListener("click",e=function(){requestAnimationFrame(function(){URL.revokeObjectURL(a.href)});a.removeAttribute("href");a.removeEventListener("click",e)});document.body.removeChild(a)},dataURLtoBlob=function(c){var b=c.split(",");c=b[0].match(/:(.*?);/)[1];if(-1!==b[0].indexOf("base64")){b= 
atob(b[1]);for(var a=b.length,d=new Uint8Array(a);a--;)d[a]=b.charCodeAt(a);return new Blob([d],{type:c})}b=decodeURIComponent(b[1]);return new Blob([b],{type:c})};