截至目前,您必须使用变通方法来处理多个文件。 multiple 属性仅在 IFRAME 模式下有效,但文件输入在 IFRAME 模式下会损坏。
要查看此解决方法,请查看此问题的错误提交:https://code.google.com/p/google-apps-script-issues/issues/detail?id=4610 https://code.google.com/p/google-apps-script-issues/issues/detail?id=4610
另外,在您的代码中,您有一些服务器端和客户端代码的混合,这些代码将不起作用:
var folder = DriveApp.getFolderById(dropBoxId); //server side
var input = document.getElementById('myFiles'); //client side
您需要在客户端进行多文件处理
我想出了一个很好的多文件上传解决方案。限制是文件必须小于 10 MB。
CODE.GS
function doGet() {
return HtmlService.createHtmlOutputFromFile('index').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function saveFile(data,name,folderId) {
var contentType = data.substring(5,data.indexOf(';'));
var file = Utilities.newBlob(Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)), contentType, name);
DriveApp.getFolderById(folderId).createFile(file);
}
索引.html
<div>
<input type="file" id="myFiles" name="myFiles" multiple/>
<input type="button" value="Submit" onclick="SaveFiles()" />
</div>
<script>
var reader = new FileReader();
var files;
var fileCounter = 0;
var folderId = "";
reader.onloadend = function () {
google.script.run
.withSuccessHandler(function(){
fileCounter++;
postNextFile();
}).saveFile(reader.result,files[fileCounter].name,folderId);
}
function SaveFiles(){
var folderSelect = document.getElementById("folderSelectId");
folderId = folderSelect.options[e.selectedIndex].value;
files = document.getElementById("myFiles").files;
postNextFile();
}
function postNextFile(){if(fileCounter < files.length){reader.readAsDataURL(files[fileCounter]);}else{fileCounter=0;alert("upload done")}}
</script>