我正在尝试使用一个文件输入元素,使用html表单将多个文件上传到云端硬盘。这似乎仅适用于一个文件,尽管文件选择器允许选择多个文件。回到脚本日志查看器中,我只看到我上传的两个文件中捕获的一个文件。这是不受支持的,还是我对此采取了错误的方式?
Code.gs:
function logForm(form) {
Logger.log(JSON.stringify(form));
return true;
}
的index.html:
<html>
<form id="uploadTest" enctype="multipart/form-data">
<input type="file" multiple="multiple" name="fileUpload">
<input type="button" id="upload" value="upload"
onclick="google.script.run.logForm(document.getElementById('uploadTest'));">
</form>
</html>
日志视图:
{"fileUpload":{"contents":"GIF87a\u0001\u0000\u0001\u0000�
\u0000\u0000��̖��,\u0000\u0000\u0000\u0000\u0001\u0000
\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;",
"type":"image/gif","name":"1x1.gif","length":35}}
答案 0 :(得分:8)
当您单击文件字段的浏览按钮时,对话框中的多个文件选择仅针对new browsers supporting HTML5发生。它不允许多个旧浏览器选择。对于旧版浏览器,唯一的好解决方案是flash或javascript插件。这是jquery上传器的一个很好的资源(一些支持多个文件):http://creativefan.com/10-ajax-jquery-file-uploaders/。因此我的建议是使用一些插件,以便在旧浏览器和新浏览器上支持它。
答案 1 :(得分:4)
您可以使用HTML5 form-data&amp;上传-多个下, 请查看此链接:https://stackoverflow.com/a/20628748/1530842
答案 2 :(得分:0)
这个示例脚本怎么样?
在此示例中,运行以下流程。
使用此功能时,请复制Google Apps脚本和HTML并将其粘贴到脚本编辑器,然后使用对话框,侧边栏和Web Apps运行HTML。
function saveFile(obj) {
var blob = Utilities.newBlob(Utilities.base64Decode(obj.data), obj.mimeType, obj.fileName);
return DriveApp.createFile(blob).getId();
}
<input name="file" id="files" type="file" multiple>
<input type='button' value='Upload' onclick='getFiles()'>
<script>
function getFiles() {
const f = document.getElementById('files');
[...f.files].forEach((file, i) => {
const fr = new FileReader();
fr.onload = (e) => {
const data = e.target.result.split(",");
const obj = {fileName: f.files[i].name, mimeType: data[0].match(/:(\w.+);/)[1], data: data[1]};
google.script.run.withSuccessHandler((id) => {
console.log(id);
}).saveFile(obj);
}
fr.readAsDataURL(file);
});
}
</script>
index.html
可以作为Web Apps和the side bar and dialog of Google Docs运行。