Drive.Files 插入和复制失败

Drive.Files insert and copy are failing

我正在尝试在 Google Apps 脚本网络应用程序中使用 Google Drive API 复制文件,最好使用 Drive.Files.copy() 方法。我也试过 Drive.Files.insert() 但没有成功。

我不是专业程序员,我猜我在如何构建请求方面缺少一些基本知识。以下是我尝试过的一些方法:

Drive.Files.copy(folders.items[i].id,
    {
        "parents": [
            {
                "id": properties.destId
            }
        ]
    }
);

错误:解析错误

Drive.Files.copy({
    "fileId": folders.items[i].id,
    "request": {
        "parents": [
            {
                "id": properties.destId
            }
        ]
    }
});

错误:提供的参数数量无效。预计只有 2-3 人

Drive.Files.copy({
    "params": {
        "fileId": folders.items[i].id
    },
    "body": {
        "title": folders.items[i].title,
        "parents": [
            {
                "id": properties.destId
            }
        ],
        "mimeType": "application/vnd.google-apps.folder"
    }
});

错误:提供的参数数量无效。预计只有 2-3 人

Drive.Files.copy(folders.items[i].id, {
    "title": folders.items[i].title,
    "parents": [
        {
            "kind": "drive#fileLink",
            "id": properties.destId
        }
    ],
    "mimeType": "application/vnd.google-apps.folder"
});

错误:解析错误

Drive.Files.insert({
    "title": folders.items[i].title,
    "parents": [
        {
            "kind": "drive#fileLink",
            "id": properties.destId
        }
    ],
    "mimeType": "application/vnd.google-apps.folder"
});

有效,但我更愿意使用 .copy,因为我只是想复制文件夹,而且它比手动传输所有属性更容易

如能就如何构建此复制请求提供任何帮助,我们将不胜感激。

编辑

我意识到文件夹不可复制,希望这可能会导致其中一些错误。但是,这些错误似乎与请求的结构方式有关,而不是因为文件不兼容,因此我仍然希望获得有关如何构建此请求的指导

Google apps script中复制文件的常用方法是makeCopy方法。流畅又不那么麻烦。

代码段可能是这样的:

while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target);
  }

要复制基于您的特定文件夹,可以使用以下脚本。

function start() {

   //your search params go here
   var folders = DriveApp.searchFolders('modifiedDate > "2016-02-10" and "email@email.com" in owners'); 

   while (folders.hasNext()) {


   var sourceFolder = folders.next();
   var targetFolder = 'Copy of ' + sourceFolder;
   //Logger.log(sourceFolder);
  // Logger.log(targetFolder);


  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = DriveApp.createFolder(targetFolder);

  if (source.hasNext()) {
    copyFolder(source.next(), target);
  }

 }
}


function copyFolder(source, target) {

  var folders = source.getFolders();
  var files   = source.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }  

}

请让我们知道您到底想完成什么,然后我们可以尝试更精确。

看来我只是颠倒了请求正文和参数。这是正确的语法:

Drive.Files.copy({
    "title": FILE_NAME,
    "parents": [
        {
            "kind": "drive#fileLink",
            "id": PARENT_ID
        }
    ],
    "mimeType": "application/vnd.google-apps.folder"
},
FILE_ID
);