用于上传文件的Google脚本无效

时间:2015-03-13 15:57:47

标签: file-upload google-apps-script

我编写了一个脚本,用于使用Google Script将文件上传到我的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>

我会提供你可以给我的任何帮助或指示。非常感谢!

3 个答案:

答案 0 :(得分:1)

目前Google正在处理一个错误。我发现了一个可能的解决办法:

将输入标记更改为:

<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。

答案 1 :(得分:0)

当前使用SandBoxMode=IFRAME时,需要向Google解决此问题。见here。我通过将IFRAME交换到NATIVE来测试它的工作原理。你可以简单地做到:

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

答案 2 :(得分:0)

Google为SandBoxMode转变了NATIVE。它现在仅设置为IFRAME。 见here