从云端硬盘中删除文件,然后将多个新文件上传到云端硬盘

时间:2016-03-09 15:48:56

标签: google-apps-script

所以我找到了一些非常有用的脚本来将多个文件上传到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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

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

您要做的是在.gs个文件中添加与GAS应用相关的用法,并通过内置google.script.run进行调用。

有关此内容的更多详情,here