Google Drive - 如何列出指定文件夹中的所有文件

Google Drive - How to List all Files in a specified folder

嗨,我被这种情况困住了,我尝试了多种不同的方法,但我无法得到我想要的。

情况: 我在 google 驱动器上托管的文件夹中有大量文件。 例如,一个用于报告的客户端文件夹有 2000-10000 个文件(这只会变得更大),我希望能够列出这些文件,其中包含标题和文件 ID 以及 parent 文件夹 ID,以便我可以直接创建文件的链接。 据我了解,我可以使用 google drive: drive-api-client-php 我已经设置了一个项目并有一个客户端 ID 和客户端密码,我已经下载了颠覆作曲家和 google-api 和 drive-api-client-php 并使用 XAMPP

到目前为止我做了什么: 我浏览了 google 的文档并观看了他们提供的教程视频。 我已经尝试了他们在网页上提供的 google sample,这是我需要的开始。 这将列出文件夹中的文件,其中包含 ID 和标题或您选择的任何字段 - 这里的两个问题是您无法指定您想要的结果的文件夹,并且结果的最大数量限制为 1000。我在需要 10,000。

我也看过一些 google 应用程序脚本 here,它似乎像 excel 中的 vba 一样用于提取文件 ID 和标题等,但是这也仅限于最大结果数和超时问题。这正是我想要的结果类型,只是没有限制。

我的问题是: 在 google 驱动器的指定文件夹中列出 10,000 个带有标题的文件 ID 时,我有什么选择?从头到尾的过程是什么,因为我觉得我可能在早期遗漏了一个影响我结果可能性的基本点. 我对此很灵活,我可以在提取数据后处理数据,首先获取数据对我来说是关键。 期待您的回复,非常感谢。 我希望这是足够清楚和有道理的。

在 Apps 脚本中尝试此代码:您需要编辑此代码,并替换您的文件夹 ID。在 Google Drive 中打开一个文件夹,在浏览器地址栏中,您会看到:

https://drive.google.com/drive/folders/Your_Folder_ID_Here

复制文件夹ID,并在下面的代码中替换它。高级 Google 服务必须在 Apps 脚本内和您的开发者控制台上的两个位置明确启用。

//This requires the Drive API To be turned on in the Advanced Google Services
function listFilesInFolder() {
  var query = 'trashed = false and ' +
      "'Your Folder ID Here' in parents";

  var filesInFolder, pageToken;

  do {
    filesInFolder = Drive.Files.list({
      q: query,
      maxResults: 100,
      pageToken: pageToken
    });
    if (filesInFolder.items && filesInFolder.items.length > 0) {
      for (var i = 0; i < filesInFolder.items.length; i++) {
        var thisFile = filesInFolder.items[i];
        //Logger.log('%s (ID: %s)', thisFile.title, thisFile.id);
        //To Do - Output content to file
        . . . . Code to output content . . . . 
      }
    } else {
      Logger.log('No files found.');
    }
    pageToken = filesInFolder.nextPageToken;
  } while (pageToken);
}

如果您正在寻找用 PHP 编写的代码,则需要使用不同的代码。

这就是我想出的,感谢上面代码和我找到的一些其他代码的帮助,将两者放在一起就可以满足我的需要。 它可能对其他人有用。

谢谢

function listFilesInFolder() {
var MAX_FILES = 2000; //use a safe value, don't be greedy
var id = 'FOLDER_ID_HERE'; 
var scriptProperties = PropertiesService.getScriptProperties();
var lastExecution = scriptProperties.getProperty('LAST_EXECUTION');
var sheet = SpreadsheetApp.getActiveSheet();
var data;
if( lastExecution === null )
lastExecution = '';

var continuationToken = scriptProperties.getProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
  var iterator = continuationToken == null ?
  DriveApp.getFolderById(id).getFiles() : DriveApp.continueFileIterator(continuationToken);


 try { 
   for( var i = 0; i < MAX_FILES && iterator.hasNext(); ++i ) {
   var file = iterator.next();
   var dateCreated = formatDate(file.getDateCreated());
    if(dateCreated > lastExecution)
     processFile(file);
    data = [
       i,
       file.getName(),
       file.getId()
      ];        

    sheet.appendRow(data);
}
} catch(err) {
 Logger.log(err);
}

if( iterator.hasNext() ) {
 scriptProperties.setProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN', iterator.getContinuationToken());
 } else { // Finished processing files so delete continuation token
 scriptProperties.deleteProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
 scriptProperties.setProperty('LAST_EXECUTION', formatDate(new Date()));
 }
 }

function formatDate(date) { return Utilities.formatDate(date, "GMT", "yyyy-MM-dd HH:mm:ss"); }

function processFile(file) {
var id = file.getId();
var name = file.getName();
//your processing...
Logger.log(name);

}