我正在尝试使用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
,因为我只是想复制文件夹,而不是手动转移所有属性
如何构建此复制请求,我们将不胜感激。
我意识到文件夹不可复制,希望可能会导致其中一些错误。但是,错误似乎与请求的结构方式有关,而不是因为文件不兼容,所以我仍然感谢如何构建此请求的指导
答案 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
);