Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 用于上载文件的Google脚本不起作用_File Upload_Google Apps Script - Fatal编程技术网

File upload 用于上载文件的Google脚本不起作用

File upload 用于上载文件的Google脚本不起作用,file-upload,google-apps-script,File Upload,Google Apps Script,我使用谷歌脚本编写了一个脚本,用于将文件上传到我的谷歌硬盘。我将它部署为一个网络应用程序,但它不工作,我不知道为什么。按钮卡在“Subiendo…”上,永远不会改变我驱动器中的任何内容。我确信我给了脚本所有的权限,并且我已经试着自己看看发生了什么,但没有成功。你能帮我找到我该做什么吗?我在这里发布代码: 代码.gs function doGet() { return HtmlService.createHtmlOutputFromFile('main').setSandboxMod

我使用谷歌脚本编写了一个脚本,用于将文件上传到我的谷歌硬盘。我将它部署为一个网络应用程序,但它不工作,我不知道为什么。按钮卡在“Subiendo…”上,永远不会改变我驱动器中的任何内容。我确信我给了脚本所有的权限,并且我已经试着自己看看发生了什么,但没有成功。你能帮我找到我该做什么吗?我在这里发布代码:

代码.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>


功能文件上传(状态){ document.getElementById('myForm').style.display='none'; document.getElementById('output')。innerHTML=status; }

如果你能给我任何帮助或指点,我都会报答的。非常感谢

当当前使用
SandBoxMode=IFRAME
时,这是一个文档问题,需要与谷歌一起解决。看见我已经通过将IFRAME交换为NATIVE测试了它的工作原理。您只需执行以下操作:

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

看起来谷歌目前正在处理一个bug。我找到了一个可能的解决方案:

将输入标记更改为:

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

将函数添加到
标记:

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

函数callServerCode(){
var formToSend=document.getElementById('myForm');
google.script.run
.withSuccessHandler(已上载文件)
.serverFunc(formToSend);
};
功能文件上传(状态){
document.getElementById('myForm').style.display='none';
document.getElementById('output')。innerHTML=status;
}
注意,在新函数中,它使用
var formToSend=document.getElementById('myForm')获取表单


并将IFRAME改为NATIVE。

谷歌已将NATIVE改为SandBoxMode。它现在设置为仅IFRAME。 看