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
);
我正在尝试在 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
);