Google 上传文件的脚本不工作
Google Script for Uploading File Not Working
我使用 Google 脚本编写了一个脚本,用于将文件上传到我的 Google 驱动器。我将它部署为 WebApp,但它无法正常工作,我也不知道为什么。该按钮只是卡在 "Subiendo..." 上,并且永远不会更改我的驱动器中的任何内容。我确定我已授予脚本所有权限,并且我已经尝试自行查看发生了什么,但没有成功。你能帮我看看我该怎么做吗?我post代码在这里:
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>
如果您能给我任何帮助或指点,我将不胜感激。非常感谢!
当前使用 SandBoxMode=IFRAME
时,Google 需要解决文档问题。参见 here。我已经通过将 IFRAME 交换为 NATIVE 来测试它是否有效。你可以简单地做到这一点:
function doGet() {
return HtmlService.createHtmlOutputFromFile('main');
}
看起来 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。
Google 已关闭 SandBoxMode 的 NATIVE。它现在设置为仅 IFRAME。
参见 here
我使用 Google 脚本编写了一个脚本,用于将文件上传到我的 Google 驱动器。我将它部署为 WebApp,但它无法正常工作,我也不知道为什么。该按钮只是卡在 "Subiendo..." 上,并且永远不会更改我的驱动器中的任何内容。我确定我已授予脚本所有权限,并且我已经尝试自行查看发生了什么,但没有成功。你能帮我看看我该怎么做吗?我post代码在这里:
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>
如果您能给我任何帮助或指点,我将不胜感激。非常感谢!
当前使用 SandBoxMode=IFRAME
时,Google 需要解决文档问题。参见 here。我已经通过将 IFRAME 交换为 NATIVE 来测试它是否有效。你可以简单地做到这一点:
function doGet() {
return HtmlService.createHtmlOutputFromFile('main');
}
看起来 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。
Google 已关闭 SandBoxMode 的 NATIVE。它现在设置为仅 IFRAME。 参见 here