防止重命名Google Forms文件上传 [英] Prevent Renaming of Google Forms File Upload

查看:55
本文介绍了防止重命名Google Forms文件上传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Google表单,该表单使用以下网站上提到的文件上传功能, https://sites.google.com/site/scriptsexamples/home/announcements/google-forms-file-upload-feature

I have a Google Form that uses the File Upload feature that is mentioned on the below site, https://sites.google.com/site/scriptsexamples/home/announcements/google-forms-file-upload-feature

我想知道两件事:

  1. 有没有一种方法可以防止重命名上载的文件. (即:original_file_name-上载程序的名称)
  2. 关于以下引用:
  1. Is there a way to prevent the renaming of the uploaded file. (IE: original_file_name - Name of Uploader)
  2. Concerning the below quote:

如果受访者决定直接从其云端硬盘上传文件, 将进行复制,并且表单所有者将成为副本的所有者.

If a respondent decides to upload a file directly from his Drive, a copy will be made and the form owner will become owner of the copy.

是否可以标识原始文件并将其删除,以免浪费上传者的根驱动器文件夹.

Is it possible to identify the original file and remove it so that it does not junk up the uploaders root Drive folder.

function getCurrentResponses() {
  var form = FormApp.openById('formID');
  var formResponses = form.getResponses();
  var numResponses = formResponses.length;  
  var lastResponse = formResponses[numResponses - 1];
  var lastResponseItem = lastResponse.getItemResponses();
  var emailAddress = lastResponseItem[0].getResponse();
  Logger.log('emailAddress: ' + emailAddress);
  var zone = lastResponseItem[1].getResponse();
  Logger.log('zone: ' + zone);
  var projectName = lastResponseItem[2].getResponse();
  Logger.log('projectName: ' + projectName);
  var igeURL = lastResponseItem[3].getResponse();
  Logger.log('igeURL: ' + igeURL);

//Creating folder for submitted project
  var DriveFolder = DriveApp.getFolderById("destinationFolder");
  var folderName = projectName;
  //create the folder
  var folderpath = DriveFolder.createFolder(folderName).addEditor(emailAddress).getId(); 
//get the path to the folder
  var pathtoemail = "https://drive.google.com/drive/folders/"+folderpath;
  var file = DriveApp.getFileById(igeURL);
  file.getParents().next().removeFile(file);
  DriveApp.getFolderById(folderpath).addFile(file);
  var fileName = file.getName();

  //Create the message and subject of the email 
var message = 'Thank you for submitting. Here is the link to your drive folder. Please use this folder to upload and receive related documentation. ' +pathtoemail ;  //a custom message, feel free to change anything inside the quotes 

var subject = "Form Related Documentation." ;  
//send the email
     MailApp.sendEmail(emailAddress, subject, message, {
  // cc: 'email@email.com'         // optional cc

 });

/*
 * Convert Excel file to Sheets
 * https://gist.github.com/azadisaryev/ab57e95096203edc2741
 * Retrieved 06/08/2017
*/

  var xlsId = igeURL; // ID of Excel file to convert
  var xlsFile = DriveApp.getFileById(xlsId); // File instance of Excel file
  var xlsBlob = xlsFile.getBlob(); // Blob source of Excel file for conversion
  var xlsFilename = xlsFile.getName(); // File name to give to converted file; defaults to same as source file
  var destFolders = folderpath; // array of IDs of Drive folders to put converted file in; empty array = root folder
  Logger.log("destFolders: " + destFolders);
  var ss = convertExcel2Sheets(xlsBlob, xlsFilename, destFolders);
  var ssID = ss.getId();
  Logger.log(ss.getId());  
  var convertFile = DriveApp.getFileById(ssID);
  convertFile.getParents().next().removeFile(convertFile);
  DriveApp.getFolderById(folderpath).addFile(convertFile);

}

/**
 * Convert Excel file to Sheets
 * https://gist.github.com/azadisaryev/ab57e95096203edc2741
 * Retrieved 06/08/2017
 * @param {Blob} excelFile The Excel file blob data; Required
 * @param {String} filename File name on uploading drive; Required
 * @param {Array} arrParents Array of folder ids to put converted file in; Optional, will default to Drive root folder
 * @return {Spreadsheet} Converted Google Spreadsheet instance
 **/
function convertExcel2Sheets(excelFile, filename, arrParents) {

  var parents  = arrParents || []; // check if optional arrParents argument was provided, default to empty array if not
  if ( !parents.isArray ) parents = []; // make sure parents is an array, reset to empty array if not
  Logger.log("arrParents: " + arrParents);

  // Parameters for Drive API Simple Upload request (see https://developers.google.com/drive/web/manage-uploads#simple)
  var uploadParams = {
    method:'post',
    contentType: 'application/vnd.ms-excel', // works for both .xls and .xlsx files
    contentLength: excelFile.getBytes().length,
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
    payload: excelFile.getBytes()
  };

  // Upload file to Drive root folder and convert to Sheets
  var uploadResponse = UrlFetchApp.fetch('https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true', uploadParams);

  // Parse upload&convert response data (need this to be able to get id of converted sheet)
  var fileDataResponse = JSON.parse(uploadResponse.getContentText());

  // Create payload (body) data for updating converted file's name and parent folder(s)
  var payloadData = {
    title: filename, 
    parents: []
  };
  if ( parents.length ) { // Add provided parent folder(s) id(s) to payloadData, if any
    for ( var i=0; i<parents.length; i++ ) {
      try {
        var folder = DriveApp.getFolderById(parents[i]); // check that this folder id exists in drive and user can write to it
        payloadData.parents.push({id: parents[i]});
      }
      catch(e){} // fail silently if no such folder id exists in Drive
    }
  }
  // Parameters for Drive API File Update request (see https://developers.google.com/drive/v2/reference/files/update)
  var updateParams = {
    method:'put',
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
    contentType: 'application/json',
    payload: JSON.stringify(payloadData)
  };

  // Update metadata (filename and parent folder(s)) of converted sheet
  UrlFetchApp.fetch('https://www.googleapis.com/drive/v2/files/'+fileDataResponse.id, updateParams);

  return SpreadsheetApp.openById(fileDataResponse.id);
}

推荐答案

我只是想发帖说,我能够为文件重命名创建解决方法.

I just wanted to post that I was able to create a work-around for the renaming of the file.

var form = FormApp.openById('formID');
var formResponses = form.getResponses();
var numResponses = formResponses.length;  
var lastResponse = formResponses[numResponses - 1];
var lastResponseItem = lastResponse.getItemResponses();      
var submittedID = lastResponseItem[3].getResponse();
var file = DriveApp.getFileById(submittedID);
var oldFileName = file.getName();
var indexOldFileName = oldFileName.indexOf("-");
var newFileName = oldFileName.slice(0,indexOldFileName - 1);
var indexOldFileExt = oldFileName.lastIndexOf(".");
var newFileExt = oldFileName.slice(indexOldFileExt);
var modName = newFileName + newFileExt;
file.setName(modName);

关于我的第二个问题,我仍然无法解决.如果找到解决方案,我会发布.

As for my second question, I still haven't been able to solve it. I will post if I find a solution.

这篇关于防止重命名Google Forms文件上传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆