如何使用Advanced Drive服务上传文件

ast*_*ood 2 google-apps-script google-drive-api

我有以下 Google Apps 脚本,它从上传表单中获取文件并将其自动存储在我的 Google 云端硬盘中(完整代码在下面的代码片段中)。问题出在这一部分:

    var file = folder.createFile(blob);
Run Code Online (Sandbox Code Playgroud)

        //Get root folder and pull all existing folders, plus setup variables pulled from form   
        var dropbox = form.Country;
        var filename = form.reportType+".xls";
        var rootfolder = DriveApp.getFolderById("0Byvtwn42HsoxfnVoSjB2NWprYnRiQ2VWUDZEendNOWwwM1FOZk1EVnJOU3BxQXhwU0pDSE0");
        //Note root folder is Live Uploads Folder in Flatworld App folder structure
        var folder, folders = rootfolder.getFoldersByName(dropbox);
        
        //Check if folder exists and if not create    
        if (folders.hasNext()) {
          folder = folders.next();
        } else {
          folder = rootfolder.createFolder(dropbox);
        }
        
        //Check if file already exists and delete if it does
        var file, files = folder.getFilesByName(filename);
        while( files.hasNext()){
          file = files.next();
          file.setTrashed(true);
        }
        
        
        //Upload file and set various properties
        var blob = form.myFile;    
        var file = folder.createFile(blob);
        var timeStamp = new Date();
        file.setDescription("Uploaded via BNI Upload Form by " + form.myName + " on: " + timeStamp);
        
        //Set file name slightly differently for Weekly Member Report (do not want to overright based on name just keep each extract so add timestamp to name)
        if (form.reportType == "Member Weekly"){
        file.setName(form.reportType + timeStamp + ".xls");
        }
      else
      {
        file.setName(filename);
      }
Run Code Online (Sandbox Code Playgroud)

我正在使用 DriveApp 类的标准 Google 应用服务createFile方法,但该方法的文件上传大小较小,并且事实证明上传接近此限制的较大文件非常慢。

我想转向高级 Google 服务,它允许您直接在 Google Apps 脚本中使用 Google 的公共 API 方法。我已经启用了 Drive API,并认为我想使用这样的东西:

function uploadFile() {
  var image = UrlFetchApp.fetch('http://goo.gl/nd7zjB').getBlob();
  var file = {
    title: 'google_logo.png',
    mimeType: 'image/png'
  };
  file = Drive.Files.insert(file, image);
  Logger.log('ID: %s, File size (bytes): %s', file.id, file.fileSize);
}
Run Code Online (Sandbox Code Playgroud)

但我正在努力将其与现有代码一起实现,并且示例语言全部适用于使用其他语言进行编码并使用 API 的人,而不仅仅是使用 Apps 脚本编写。

请问有人可以建议使用高级方法所需的代码修订,从而允许更快、更大的上传吗?

JSD*_*ton 5

Drive两者之间可能存在一些来回变化,DriveApp而不是深入到纯粹的 Drive API 中。

//Upload file and set various properties
var mediaData = form.myFile;    
var timeStamp = new Date();

var resource = {
  title: (form.reportType == "Member Weekly") ? form.reportType + timeStamp + ".xls" : filename,
  mimetype: 'application/vnd.ms-excel',
  description: "Uploaded via BNI Upload Form by " + form.myName + " on: " + timeStamp
};

var file = Drive.Files.insert(resource, mediaData); // create file using Drive API
var fileId = file.id;    
var DriveAppFile = DriveApp.getFileById(fileId); // retrieve file in DriveApp scope. 

DriveApp.removeFile(DriveAppFile); // remove new file from Users root My Drive
folder.addFile(DriveAppFile); // puts file in selected folder
Run Code Online (Sandbox Code Playgroud)

Drive此代码中指的是从“资源”菜单启用的Drive API 高级 Google 服务。您还需要从开发人员控制台将其作为 API 启用。这些高级服务就像 Liraries 一样附加到您的脚本中。Drive这是图书馆的默认设置。

如何启用高级服务