我编写了一个脚本,用于使用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>
我会提供你可以给我的任何帮助或指示。非常感谢!
答案 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