問題描述
我正在嘗試使用我的應用一次上傳多個文件.它識別何時選擇了 2 個或更多文件.但是,它只會將選擇的第一個文件上傳到我的驅動器.另外(雖然很小),我想知道如何將我的 textarea 字體更改為 Times New Roman 以與字體的其余部分保持一致.
代碼.gs
函數 doGet() {返回 HtmlService.createHtmlOutputFromFile('form').setSandboxMode(HtmlService.SandboxMode.IFRAME);}函數上傳文件(表格){嘗試 {var 文件夾標題 = form.zone + ' |建筑:'+ form.building +' |' + form.propertyAddress + ' |' + form.attachType;var 文件夾,文件夾 = DriveApp.getFolderById("0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs");var createfolder = 文件夾.createFolder(文件夾標題);文件夾=創建文件夾;var blob = form.filename;var file = folder.createFile(blob);file.setDescription(" " + form.fileText);return "文件上傳成功!這是您文件的鏈接:" + folder.getUrl();} 捕捉(錯誤){Logger.log('err:' + error.toString());返回錯誤.toString();}}函數上傳ArquivoParaDrive(base64Data,nomeArq,idPasta){嘗試{var splitBase = base64Data.split(','),type = splitBase[0].split(';')[0].replace('data:','');var byteCharacters = Utilities.base64Decode(splitBase[1]);var ss = Utilities.newBlob(byteCharacters, type);ss.setName(nomeArq);var file = DriveApp.getFolderById("0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs").createFile(ss);返回文件.getName();}捕捉(e){return '錯誤:' + e.toString();}}
form.html
<div id="formcontainer"><label for="myForm">設施項目數據庫附件上傳器:</label><br><br><form id="myForm"><label for="myForm">項目詳情:</label>
<input type="text" name="zone" placeholder="Zone:"></div>
<input type="text" name="building" placeholder="Building(s):"></div>
<input type="text" name="propertyAddress" placeholder="房產地址:"></div>
<label for="fileText">項目描述:</label><TEXTAREA 名稱="項目描述"placeholder="在此處描述您的附件:"樣式=寬度:400像素;高度:200像素;"></TEXTAREA></div><br><label for="attachType">選擇附件類型:</label><br><選擇名稱="attachType"><option value="僅限圖片">圖片</option><option value="僅限提案">提案</option><option value="圖片&提案">全部</option></選擇><br><label for="myFile">上傳附件:</label><br><input type="file" name="filename" id="myFile" 多個><input type="submit" value="Submit" onclick="iteratorFileUpload()"></表格></div><div id="輸出"></div><腳本>函數迭代器文件上傳(){var allFiles = document.getElementById('myFile').files;if (allFiles.length == 0) {alert('沒有選擇文件!');} 別的 {//每次發送一個文件變量 i=0;for (i=0; i < allFiles.total; i+=1) {console.log('本次迭代:' + i);sendFileToDrive(allFiles[i]);};};};函數發送文件到驅動(文件){var reader = new FileReader();reader.onload = 函數 (e) {var content = reader.result;console.log('發送中' + file.name);google.script.run.withSuccessHandler(fileUploaded).uploadArquivoParaDrive(內容,文件名,currFolder);}reader.readAsDataURL(文件);};</腳本><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script><腳本>//上傳 de arquivo dentro das Pastas Arquivos Auxiliares功能 iterarArquivosUpload() {var arquivos = document.getElementById('inputUpload').files;如果(arquivos.length == 0){alert('沒有選擇文件!');} 別的 {//顯示進度條numUploads.total = arquivos.length;$('.progressUpload').progressbar({值:假});$('.labelProgressUpload').html('Preparando arquivos para upload');//一次發送每個文件for (var arqs = 0; arqs < numUploads.total; arqs++) {控制臺.log(arqs);enviarArquivoParaDrive(arquivos[arqs]);}}}功能enviarArquivoParaDrive(arquivo){var reader = new FileReader();reader.onload = 函數 (e) {var content = reader.result;console.log('正在發送' + arquivo.name);google.script.run.withSuccessHandler(updateProgressbar).uploadArquivoParaDrive(content, arquivo.name, currFolder);}reader.readAsDataURL(arquivo);}函數更新進度條(idUpdate){console.log('收到:' + idUpdate);numUploads.done++;var porc = Math.ceil((numUploads.done/numUploads.total)*100);$('.progressUpload').progressbar({value: porc });$('.labelProgressUpload').html(numUploads.done +'/'+ numUploads.total);如果(numUploads.done == numUploads.total){上傳完成();numUploads.done = 0;};}</腳本><腳本>功能文件上傳(狀態){document.getElementById('myForm').style.display = 'none';document.getElementById('output').innerHTML = status;}</腳本><風格>身體 {最大寬度:400px;填充:20px;邊距:自動;}輸入 {顯示:內聯塊;寬度:100%;填充:5px 0px 5px 5px;邊距底部:10px;-webkit-box-sizing:邊框框;? -moz-box-sizing: 邊框;box-sizing:邊框框;}選擇 {邊距:5px 0px 15px 0px;}輸入[類型=提交"] {寬度:自動!重要;顯示:塊!重要;}輸入[類型=文件"] {填充:5px 0px 15px 0px !重要;}</風格></身體>
我知道這個問題很老了,但是在找到它和相關問題之后,我一直無法讓多文件上傳工作.因此,在多次撞墻之后,我想發布一個完整的示例(.html 和 .gs),以防將來有人正在尋找一個開始.當我現在部署它時,這是有效的,并且希望對那里的其他人有用.請注意,我只是硬編碼驅動器中的文件夾以在 code.gs 文件中使用,但可以輕松更改.
form.html:
<div id="formcontainer"><label for="myForm">設施項目數據庫附件上傳器:</label><br><br><form id="myForm"><label for="myForm">項目詳情:</label>
<input type="text" name="zone" placeholder="Zone:"></div>
<input type="text" name="building" placeholder="Building(s):"></div>
<input type="text" name="propertyAddress" placeholder="房產地址:"></div>
<label for="fileText">項目描述:</label><TEXTAREA 名稱="項目描述"placeholder="在此處描述您的附件:"樣式=寬度:400像素;高度:200像素;"></TEXTAREA></div><br><label for="attachType">選擇附件類型:</label><br><選擇名稱="attachType"><option value="僅限圖片">圖片</option><option value="僅限提案">提案</option><option value="圖片&提案">全部</option></選擇><br><label for="myFile">上傳附件:</label><br><input type="file" name="filename" id="myFile" 多個><input type="button" value="Submit" onclick="iteratorFileUpload()"></表格></div><div id="輸出"></div><div id="進度條"><div class="progress-label"></div></div><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script><link rel="stylesheet" ><script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script><腳本>var numUploads = {};numUploads.done = 0;numUploads.total = 0;//將文件上傳到驅動器的文件夾中//設置為將它們全部發送到一個文件夾(在 .gs 文件中指定)函數迭代器文件上傳(){var allFiles = document.getElementById('myFile').files;if (allFiles.length == 0) {alert('沒有選擇文件!');} 別的 {//顯示進度條numUploads.total = allFiles.length;$('#progressbar').progressbar({值:假});//.append("<div class='caption'>37%</div>");$(".progress-label").html('準備上傳文件');//一次發送每個文件for (var i = 0; i < allFiles.length; i++) {控制臺.log(i);sendFileToDrive(allFiles[i]);}}}函數發送文件到驅動(文件){var reader = new FileReader();reader.onload = 函數 (e) {var content = reader.result;console.log('發送中' + file.name);var currFolder = '某事';google.script.run.withSuccessHandler(updateProgressbar).uploadFileToDrive(content, file.name, currFolder);}reader.readAsDataURL(文件);}函數更新進度條(idUpdate){console.log('收到:' + idUpdate);numUploads.done++;var porc = Math.ceil((numUploads.done/numUploads.total)*100);$("#progressbar").progressbar({value: porc });$(".progress-label").text(numUploads.done +'/'+ numUploads.total);如果(numUploads.done == numUploads.total){//上傳完成();numUploads.done = 0;};}</腳本><腳本>功能文件上傳(狀態){document.getElementById('myForm').style.display = 'none';document.getElementById('output').innerHTML = status;}</腳本><風格>身體 {最大寬度:400px;填充:20px;邊距:自動;}輸入 {顯示:內聯塊;寬度:100%;填充:5px 0px 5px 5px;邊距底部:10px;-webkit-box-sizing:邊框框;? -moz-box-sizing: 邊框;box-sizing:邊框框;}選擇 {邊距:5px 0px 15px 0px;}輸入[類型=提交"] {寬度:自動!重要;顯示:塊!重要;}輸入[類型=文件"] {填充:5px 0px 15px 0px !重要;}#進度條{寬度:100%;文本對齊:居中;溢出:隱藏;位置:相對;垂直對齊:中間;}.進度標簽{向左飄浮;邊距頂部:5px;字體粗細:粗體;文字陰影:1px 1px 0 #fff;寬度:100%;高度:100%;位置:絕對;垂直對齊:中間;}</風格></身體>
code.gs:
函數 doGet() {返回 HtmlService.createHtmlOutputFromFile('form').setSandboxMode(HtmlService.SandboxMode.IFRAME);}函數uploadFileToDrive(base64Data,文件名){嘗試{var splitBase = base64Data.split(','),type = splitBase[0].split(';')[0].replace('data:','');var byteCharacters = Utilities.base64Decode(splitBase[1]);var ss = Utilities.newBlob(byteCharacters, type);ss.setName(文件名);var dropbox = "某事";//文件夾名稱var 文件夾,文件夾 = DriveApp.getFoldersByName(dropbox);如果(文件夾.hasNext()){文件夾 = 文件夾.next();} 別的 {文件夾 = DriveApp.createFolder(dropbox);}var file = folder.createFile(ss);返回文件.getName();}捕捉(e){return '錯誤:' + e.toString();}}
I'm trying to upload multiple files at once with my app. It recognizes when there are 2 or more files being selected. However, it will only upload the 1st file that is selected to my drive. Also (although quite minor), I was wondering how I can change my textarea font to be Times New Roman to stay consistent with the rest of the font.
Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('form')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function uploadFiles(form) {
try {
var foldertitle = form.zone + ' | Building: ' + form.building + ' | ' + form.propertyAddress + ' | ' + form.attachType;
var folder, folders = DriveApp.getFolderById("0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs");
var createfolder = folders.createFolder(foldertitle);
folder = createfolder;
var blob = form.filename;
var file = folder.createFile(blob);
file.setDescription(" " + form.fileText);
return "File(s) uploaded successfully! Here is the link to your file(s): " + folder.getUrl();
} catch (error) {
Logger.log('err: ' + error.toString());
return error.toString();
}
}
function uploadArquivoParaDrive(base64Data, nomeArq, idPasta) {
try{
var splitBase = base64Data.split(','),
type = splitBase[0].split(';')[0].replace('data:','');
var byteCharacters = Utilities.base64Decode(splitBase[1]);
var ss = Utilities.newBlob(byteCharacters, type);
ss.setName(nomeArq);
var file = DriveApp.getFolderById("0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs").createFile(ss);
return file.getName();
}catch(e){
return 'Erro: ' + e.toString();
}
}
form.html
<body>
<div id="formcontainer">
<label for="myForm">Facilities Project Database Attachment Uploader:</label>
<br><br>
<form id="myForm">
<label for="myForm">Project Details:</label>
<div>
<input type="text" name="zone" placeholder="Zone:">
</div>
<div>
<input type="text" name="building" placeholder="Building(s):">
</div>
<div>
<input type="text" name="propertyAddress" placeholder="Property Address:">
</div>
<div>
<label for="fileText">Project Description:</label>
<TEXTAREA name="projectDescription"
placeholder="Describe your attachment(s) here:"
style ="width:400px; height:200px;"
></TEXTAREA>
</div>
<br>
<label for="attachType">Choose Attachment Type:</label>
<br>
<select name="attachType">
<option value="Pictures Only">Picture(s)</option>
<option value="Proposals Only">Proposal(s)</option>
<option value="Pictures & Proposals">All</option>
</select>
<br>
<label for="myFile">Upload Attachment(s):</label>
<br>
<input type="file" name="filename" id="myFile" multiple>
<input type="submit" value="Submit" onclick="iteratorFileUpload()">
</form>
</div>
<div id="output"></div>
<script>
function iteratorFileUpload() {
var allFiles = document.getElementById('myFile').files;
if (allFiles.length == 0) {
alert('No file selected!');
} else {
// Send each file one at a time
var i=0;
for (i=0; i < allFiles.total; i+=1) {
console.log('This iteration: ' + i);
sendFileToDrive(allFiles[i]);
};
};
};
function sendFileToDrive(file) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + file.name);
google.script.run
.withSuccessHandler(fileUploaded)
.uploadArquivoParaDrive(content, file.name, currFolder);
}
reader.readAsDataURL(file);
};
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
// Upload de arquivo dentro das pastas Arquivos Auxiliares
function iterarArquivosUpload() {
var arquivos = document.getElementById('inputUpload').files;
if (arquivos.length == 0) {
alert('No file selected!');
} else {
//Show Progress Bar
numUploads.total = arquivos.length;
$('.progressUpload').progressbar({
value : false
});
$('.labelProgressUpload').html('Preparando arquivos para upload');
// Send each file at a time
for (var arqs = 0; arqs < numUploads.total; arqs++) {
console.log(arqs);
enviarArquivoParaDrive(arquivos[arqs]);
}
}
}
function enviarArquivoParaDrive(arquivo) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + arquivo.name);
google.script.run.withSuccessHandler(updateProgressbar).uploadArquivoParaDrive(content, arquivo.name, currFolder);
}
reader.readAsDataURL(arquivo);
}
function updateProgressbar( idUpdate ){
console.log('Received: ' + idUpdate);
numUploads.done++;
var porc = Math.ceil((numUploads.done / numUploads.total)*100);
$('.progressUpload').progressbar({value: porc });
$('.labelProgressUpload').html(numUploads.done +'/'+ numUploads.total);
if( numUploads.done == numUploads.total ){
uploadsFinished();
numUploads.done = 0;
};
}
</script>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>
<style>
body {
max-width: 400px;
padding: 20px;
margin: auto;
}
input {
display: inline-block;
width: 100%;
padding: 5px 0px 5px 5px;
margin-bottom: 10px;
-webkit-box-sizing: border-box;
?? -moz-box-sizing: border-box;
box-sizing: border-box;
}
select {
margin: 5px 0px 15px 0px;
}
input[type="submit"] {
width: auto !important;
display: block !important;
}
input[type="file"] {
padding: 5px 0px 15px 0px !important;
}
</style>
</body>
I know this question is old, but after finding it and related ones, I was never able to get the multiple file upload working. So after a lot of banging my head against walls, I wanted to post a full example (.html and .gs) in case anyone in the future is looking for one to get started. This is working when I deploy it right now and will hopefully work for other people out there. Note that I just hardcoded the folder in the drive to use in the code.gs file, but that can be easily changed.
form.html:
<body>
<div id="formcontainer">
<label for="myForm">Facilities Project Database Attachment Uploader:</label>
<br><br>
<form id="myForm">
<label for="myForm">Project Details:</label>
<div>
<input type="text" name="zone" placeholder="Zone:">
</div>
<div>
<input type="text" name="building" placeholder="Building(s):">
</div>
<div>
<input type="text" name="propertyAddress" placeholder="Property Address:">
</div>
<div>
<label for="fileText">Project Description:</label>
<TEXTAREA name="projectDescription"
placeholder="Describe your attachment(s) here:"
style ="width:400px; height:200px;"
></TEXTAREA>
</div>
<br>
<label for="attachType">Choose Attachment Type:</label>
<br>
<select name="attachType">
<option value="Pictures Only">Picture(s)</option>
<option value="Proposals Only">Proposal(s)</option>
<option value="Pictures & Proposals">All</option>
</select>
<br>
<label for="myFile">Upload Attachment(s):</label>
<br>
<input type="file" name="filename" id="myFile" multiple>
<input type="button" value="Submit" onclick="iteratorFileUpload()">
</form>
</div>
<div id="output"></div>
<div id="progressbar">
<div class="progress-label"></div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<link rel="stylesheet" >
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script>
var numUploads = {};
numUploads.done = 0;
numUploads.total = 0;
// Upload the files into a folder in drive
// This is set to send them all to one folder (specificed in the .gs file)
function iteratorFileUpload() {
var allFiles = document.getElementById('myFile').files;
if (allFiles.length == 0) {
alert('No file selected!');
} else {
//Show Progress Bar
numUploads.total = allFiles.length;
$('#progressbar').progressbar({
value : false
});//.append("<div class='caption'>37%</div>");
$(".progress-label").html('Preparing files for upload');
// Send each file at a time
for (var i = 0; i < allFiles.length; i++) {
console.log(i);
sendFileToDrive(allFiles[i]);
}
}
}
function sendFileToDrive(file) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + file.name);
var currFolder = 'Something';
google.script.run.withSuccessHandler(updateProgressbar).uploadFileToDrive(content, file.name, currFolder);
}
reader.readAsDataURL(file);
}
function updateProgressbar( idUpdate ){
console.log('Received: ' + idUpdate);
numUploads.done++;
var porc = Math.ceil((numUploads.done / numUploads.total)*100);
$("#progressbar").progressbar({value: porc });
$(".progress-label").text(numUploads.done +'/'+ numUploads.total);
if( numUploads.done == numUploads.total ){
//uploadsFinished();
numUploads.done = 0;
};
}
</script>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>
<style>
body {
max-width: 400px;
padding: 20px;
margin: auto;
}
input {
display: inline-block;
width: 100%;
padding: 5px 0px 5px 5px;
margin-bottom: 10px;
-webkit-box-sizing: border-box;
?? -moz-box-sizing: border-box;
box-sizing: border-box;
}
select {
margin: 5px 0px 15px 0px;
}
input[type="submit"] {
width: auto !important;
display: block !important;
}
input[type="file"] {
padding: 5px 0px 15px 0px !important;
}
#progressbar{
width: 100%;
text-align: center;
overflow: hidden;
position: relative;
vertical-align: middle;
}
.progress-label {
float: left;
margin-top: 5px;
font-weight: bold;
text-shadow: 1px 1px 0 #fff;
width: 100%;
height: 100%;
position: absolute;
vertical-align: middle;
}
</style>
</body>
code.gs:
function doGet() {
return HtmlService.createHtmlOutputFromFile('form')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function uploadFileToDrive(base64Data, fileName) {
try{
var splitBase = base64Data.split(','),
type = splitBase[0].split(';')[0].replace('data:','');
var byteCharacters = Utilities.base64Decode(splitBase[1]);
var ss = Utilities.newBlob(byteCharacters, type);
ss.setName(fileName);
var dropbox = "Something"; // Folder Name
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var file = folder.createFile(ss);
return file.getName();
}catch(e){
return 'Error: ' + e.toString();
}
}
這篇關于使用 Google App 腳本將多個文件上傳到 Google Drive的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!