2016-03-09 118 views
0

因此,我发现一些非常有用的脚本可以将多个文件上传到Google云端硬盘,但是我想要的是一个组合的HTML页面,可以从该页面中删除所有文件首先,然后我可以上传所有新的文件夹。从云端硬盘中删除文件,然后将多个新文件上传到云端硬盘

所以我需要帮助的是添加一个进度条为已删除的项目,然后当完成后,我可以上传。目前上传部分工作正常,但onclick不会调用removefiles()脚本,不知道为什么。这可能吗?或者,是否有方法可以更改多个文档的ujpload以覆盖Drive中的同名文件,因此无需先删除它们?

当前的脚本是:

GAS

function doGet() { 
 
    return HtmlService.createHtmlOutputFromFile('index') 
 
    .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 = "KPI Slider - Intranet Homepage - Images"; // 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(); 
 
    } 
 
}

HTML

<body> 
 
    <div id="formcontainer1"> 
 
    <label for="myForm">Experis Intranet KPI Slider Images Update:</label> 
 
    <br><br> 
 
    <form id="formdelete"> 
 
    <label for="filedelete">Delete File(s):</label> 
 
    <br><br> 
 
    <input id="deletebutton" type="button" value="DELETE" onclick="removefiles();"> 
 
    </form> 
 
    </div> 
 
    
 
    <div id="formcontainer"> 
 
    <label for="myForm">Experis Intranet KPI Slider Images Update:</label> 
 
    <form id="myForm"> 
 
    <label for="myFile">Upload Attachment(s):</label> 
 
    <br> 
 
    <input type="file" name="filename" id="myFile" multiple> 
 
    <input id="addbutton" type="button" value="SUBMIT" onclick="iteratorFileUpload();"> 
 
    </form> 
 
    </div> 
 

 
    <div id="output"></div> 
 
    <div id="progressbar"> 
 
    <div class="progress-label"></div> 
 
</div> 
 

 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 

 
<script> 
 
function removefiles() { 
 

 
var myFolder = DriveApp.getFolderById('0B5W8nbTl37-fUzk4aGd6dEQzSzg'); 
 

 
thisFile = myFolder.getFiles(); 
 

 
while (thisFile.hasNext()) { 
 
    var eachFile = thisFile.next(); 
 
    var idToDLET = eachFile.getId(); 
 
    Logger.log('idToDLET: ' + idToDLET); 
 

 
    var rtrnFromDLET = Drive.Files.remove(idToDLET); 
 
}; 
 
} 
 
</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; 
 
    } 
 
    #deletebutton{ 
 
    background-color: #cd545b; 
 
    color: white; 
 
    } 
 
    #addbutton{ 
 
    background-color: #789f90; 
 
    color: white; 
 
    } 
 
    </style> 
 
</body>

回答

0

它应该工作,但DriveApp是一个GAS库,所以你不能称它为客户端。

你想要做的是在.gs文件中添加GAS应用程序相关用法,并通过内置的google.script.run调用它们。

关于此的更多详细信息,here

相关问题