2015-03-13 55 views
1

我编写了一个脚本,用于使用Google脚本将文件上传到我的Google云端硬盘。我将它部署为WebApp,但它不起作用,我不知道为什么。该按钮只能卡在“Subiendo ...”上,并且不会更改我的云端硬盘中的任何内容。我相信我给了脚本所有的权限,并且我已经尝试了解没有任何成功的情况下我自己正在发生的事情。你能帮我找到我该怎么做?我张贴在这里的代码:谷歌脚本上传文件不起作用

Code.gs

function doGet() { 
    return HtmlService.createHtmlOutputFromFile('main').setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

function serverFunc(theForm) { 
    try{ 
     var folder_name = "publicaciones"; 
     var folder,folders = DriveApp.getFoldersByName(folder_name); 

     if(folders.hasNext()){ 
      folder = folders.next(); 
     }else{ 
      folder = DriveApp.createFolder(folder_name); 
     } 
     Logger.log("TheForm", theForm == null); 
     var blob = theForm.theFile; 
     Logger.log("Blob!", blob == null); 
     var file = folder.createFile(blob); 
     Logger.log("File:", file.getName()); 
     return "Archivo subido exitosamente: " + file.getUrl(); 

    } catch(error){ 
     Logger.log("error: ", error.toString()); 
     return error.toString();  
    } 
} 

** ** main.html中

<div> 
<form id="myForm"> 
    <input type="file" name="theFile"> 
    <input type="hidden" name="anExample"> 
    <br> 
    <input type="button" value="Subir Archivo" onclick="this.value='Subiendo...'; 
                 google.script.run.withSuccessHandler(fileUploaded).serverFunc(this.parentNode); 
                 return false;"> 
</form> 
</div> 
<div id="output"> 
</div> 

<script> 
    function fileUploaded(status) { 
     document.getElementById('myForm').style.display = 'none'; 
     document.getElementById('output').innerHTML = status; 
    } 
</script> 

我appreaciate任何帮助或指针,你可以给我。非常感谢!

回答

1

看起来目前谷歌正在开发一个bug。我发现了一个可能的解决办法:

您输入的标签改成这样:

<input type="button" value="Subir Archivo" onclick="callServerCode()"/> 

添加一个功能到<script>标签:

<script> 

    function callServerCode() { 
    var formToSend = document.getElementById('myForm'); 

    google.script.run 
     .withSuccessHandler(fileUploaded) 
     .serverFunc(formToSend); 
    }; 

    function fileUploaded(status) { 
     document.getElementById('myForm').style.display = 'none'; 
     document.getElementById('output').innerHTML = status; 
    } 

</script> 

注意的是,新的功能里面,它会形式使用var formToSend = document.getElementById('myForm');

并将IFRAME更改为NATIVE。

0

这是目前使用SandBoxMode=IFRAME时需要使用Google修复的文档问题。见here。我已经通过交换IFRAME到NATIVE来测试它的工作原理。你可以简单地做到这一点:

function doGet() { 
    return HtmlService.createHtmlOutputFromFile('main'); 
} 
0

Google对SandBoxMode已经转为NATIVE。它现在只设置为IFRAME。 见here