Drive.Files插入和复制失败

时间:2016-02-22 03:59:26

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

我正在尝试使用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,因为我只是想复制文件夹,而不是手动转移所有属性

如何构建此复制请求,我们将不胜感激。

修改

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

2 个答案:

答案 0 :(得分:0)

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);
  }  

}

请告诉我们您想要完成的是什么,然后我们可以尝试更精确。

答案 1 :(得分:0)

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

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