google-apps-script - 上传文件重命名后保留文件扩展名 - App Script

标签 google-apps-script

所以我有一个 HTML 服务将文件 blob 上传到 google 驱动器文件夹,该文件夹也重命名该文件。我遇到的问题是重命名操作实际上导致文件扩展名被删除。我最初尝试做的是添加一个函数来检索文件扩展名,然后将其添加到 .rename 操作中,但如果有更有效的方法来保留扩展名,我会采用它。

代码.gs

var submissionSSKey = 'SSId';
var folderId = "FolderId";

function doGet(e) {
  var template = HtmlService.createTemplateFromFile('form.html');
  template.action = ScriptApp.getService().getUrl();
  return template.evaluate();
}

function processForm(theForm) {


  // Fill in response template
  var template = HtmlService.createTemplateFromFile('Thanks.html');
  var comp = 'N/A'
  var name = template.name = theForm.name;
  var department = template.department = theForm.department;
  var message = template.message = theForm.message;
  var email = template.email = theForm.email;

  var fileBlob = theForm.myFile;
  var folder = DocsList.getFolderById(folderId);
  var doc = folder.createFile(fileBlob);
  //var fileUrl = template.fileUrl = doc.getUrl();
  var rename = doc.rename(department+' - '+name);     

    var now     = new Date(); 
    var year    = now.getFullYear();
    var month   = now.getMonth()+1; 
    var day     = now.getDate();
    var hour    = ((now.getHours()>12)?(now.getHours()-12):now.getHours());;
    var minute  = now.getMinutes();
    var second  = now.getSeconds(); 
    if(month.toString().length == 1) {
        var month = '0'+month;
    }
    if(day.toString().length == 1) {
        var day = '0'+day;
    }   
    if(hour.toString().length == 1) {
        var hour = '0'+hour;
    }
    if(minute.toString().length == 1) {
        var minute = '0'+minute;
    }
    if(second.toString().length == 1) {
        var second = '0'+second;
    }   
    var dateTime = month+'/'+day+'/'+year+' '+hour+':'+minute+':'+second;

  // Record submission in spreadsheet
  var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
  var lastRow = sheet.getLastRow();
  var targetRange = sheet.getRange(lastRow+1, 1, 1, 6).setValues([[comp,name,department,message,email,dateTime]]);


  // Return HTML text for display in page.
  return template.evaluate().getContent();
}

form.html

<script>
  // Javascript function called by "submit" button handler,
  // to show results.
  function updateOutput(resultHtml) {
    toggle_visibility('inProgress');
    var outputDiv = document.getElementById('output');
    outputDiv.innerHTML = resultHtml;
  }

  // From blog.movalog.com/a/javascript-toggle-visibility/
  function toggle_visibility(id) {
    var e = document.getElementById(id);
    if(e.style.display == 'block')
      e.style.display = 'none';
    else
      e.style.display = 'block';
  }
</script>

<div id="formDiv" style="display: block;">
<!-- Form div will be hidden after form submission -->
<form id="myForm">
<table>
    <tr><td>Name:</td> <td><input name="name" type="text" /></td>
    <tr><td>Department:  <td><select name="department">
    <option>Select Option</option>
    <option>Cashier</option>
    <option>Greeter</option>
    <option>Runner</option>
    <option>Line Control</option>
    <option>IDB</option>
    <option>Unknown</option>
    </select></td>
    <tr><td>Email:</td> <td><input name="email" type="text" /></td>
    <tr><td>Message:</td> <td><textarea name="message" style="margin: 2px; height: 148px; width: 354px;"></textarea></td>
    </table>

    School Schedule (Image Files Only): <input name="myFile" type="file"/><br/>
  <input type="button" value="Submit" id="submit"
      onclick="toggle_visibility('formDiv'); toggle_visibility('inProgress');
        google.script.run
          .withSuccessHandler(updateOutput)
          .processForm(this.parentNode)" />
</form>
</div>

<div id="inProgress" style="display: none;">
<!-- Progress starts hidden, but will be shown after form submission. -->
<img src="https://dl.dropboxusercontent.com/u/211279/loading3T.gif" alt="Loading">Uploading. Please wait...
</div>

<div id="output">
  <!-- Blank div will be filled with "Thanks.html" after form submission. -->
</div>

谢谢.html

<div>
    <h1>Thanks</h1>
    <p>Thank you for your submission.</p>
    Name: <?= name ?><br/>
    Department: <?= department ?><br/>
    Message: <?= message ?><br/>
    Email: <?= email ?><br/>

    <p><b>Note:&nbsp;</b>All requests for work schedule changes must be submitted by 11:59PM January 23rd.</p>

</div>

最佳答案

您将获得 Blob从表单中,因此您可以在 Google 云端硬盘上创建文件之前设置名称。 How to extract extension from filename string in Javascript? 中展示了一种在各种场景中获取扩展名的好技术。 ,所以我只是借用了:

  ...
  var fileBlob = theForm.myFile;
  var fname = fileBlob.getName();
  var newName = "new_file_name";  // simple example
  // extract extension using RegEx
  // from https://stackoverflow.com/a/680982/1677912
  var extensionfinder = /(?:\.([^.]+))?$/; 
  var ext = extensionfinder(fname)[1];
  fileBlob.setName(newName+'.'+ext);
  var folder = DriveApp.getFolderById(folderId);
  var doc = folder.createFile(fileBlob);
  ...

关于google-apps-script - 上传文件重命名后保留文件扩展名 - App Script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820450/

相关文章:

javascript - 自定义函数停止工作

html - 使用 Html 服务引用项目文件

google-apps-script - Google 电子表格导出为 PDF 的边距参数

javascript - 在 Google Apps 脚本中定义多个范围

google-apps-script - OnEdit 不会通过 Google App 脚本中的复制和粘贴触发

google-apps-script - 服务调用次数过多(Google Apps 脚本)

google-apps-script - Google 工作表未更新自定义函数返回值

google-apps-script - 无法使用 Google Apps 脚本显示授权对话框

javascript - 文件下载功能需要超过 6 分钟,我该如何改进,在 google app 脚本中?

javascript - 在 Google Scripts 中将 JS 变量传递给 HTML