如何使用GAS区分DriveApp中的文件和文件夹

时间:2014-06-25 10:59:06

标签: google-apps-script google-drive-api

我知道文件夹实际上是Google云端硬盘中包含特殊mimeType application/vnd.google-apps.folder的文件。 但是有关DriveApp Folder类的文档不包含像DriveApp File类那样的getMimeType()方法。

如果该函数的参数引用文件夹或(普通)文件,如何在函数中找到?

function displayResults(fileOrFolder)
{
  var id   = fileOrFolder.getId();
  var name =  fileOrFolder.getName();

  var mimeType = fileOrFolder.getMimeType();  // works if file; error if folder

  if (fileOrFolder == <Class File>)
  {
     <do something>
  }
  else if (fileOrFolder == <Class Folder>)
  {
     <do something else>
  }
}

3 个答案:

答案 0 :(得分:2)

查看方法是否存在。如果obj.getMimeType ===未定义其文件夹。
或者,为了使api更改(将方法添加到文件夹)更加健壮,请使用
if (obj.getMimeType===undefined || obj.getMimeType.toLowerCase() =="application/vnd.google-apps.folder")

答案 1 :(得分:0)

我不明白为什么你说Zig的答案不起作用......我所做的所有测试都是积极的。

我如何测试它的示例(测试ID是公开共享的,所以应该适用于任何人):

function test(){
  var item = DriveApp.getFileById('0B3qSFd3iikE3MS0yMzU4YjQ4NC04NjQxLTQyYmEtYTExNC1lMWVhNTZiMjlhMmI');
  testDriveFolders(item);
  var item = DriveApp.getFileById('1fXxLHuDlySZ6rOQjTsZdUl6rnw14sa17Q0ZTZ0HoGk1jbuHX-eLq1dyf');
  testDriveFolders(item);
}

function testDriveFolders(obj){
  try{var mimeType = obj.getMimeType()}catch(e){mimeType = 'folder'};
  var name =  obj.getName();
  if (mimeType =="application/vnd.google-apps.folder" || mimeType == 'folder'){
    Logger.log(name+' is a folder');
  }else{
        Logger.log(name+' is of the type '+mimeType);
  }
}

答案 2 :(得分:0)

获取与ID关联的文件对象。 getMimeType()将起作用:

var mt = DriveApp.getFileByID(fileOrFolder.getId()).getMimeType();
if (mt == MimeType.FOLDER) {
  // it's a folder
} else {
  // it's a file.
}