无法使用 Drive Service api 或 DriveApp 复制 appscript 文件

问题描述 投票:0回答:1

我想使用 appscript 从文件夹中复制文件。

const  copy = (fromFolder, toFolder) => {
  // copy files
  const files = fromFolder.getFiles()
  while (files.hasNext()) {
    const file = files.next();
    const newFile = file.makeCopy(toFolder)
    newFile.setName(file.getName())
  }

  // copy folders
  const folders = fromFolder.getFolders()
  while (folders.hasNext()) {
    const  folder = folders.next()
    const newFolder = toFolder.createFolder(folder.getName())
    copy(folder, newFolder)
  }
}

脚本按预期工作,但当我尝试复制文件夹中的 Apps 脚本文件时,它不起作用。因此,我使用 Drive API 服务进行了测试。在我的控制台中,我可以看到所有文件,甚至是 Apps 脚本文件。但是,当我尝试复制它们时,它不适用于 Apps 脚本文件。我做错了什么?

 const copyResource = (sourceFolderId, targetFolderId) => {
    const params = {
    q: `'${sourceFolderId}' in parents and trashed = false and mimeType != 'application/vnd.google-apps.folder'`,
    supportsAllDrives: true,
    includeItemsFromAllDrives: true,
  };

  const files = Drive.Files.list(params).files;
  console.log(files);

  files.forEach((file) => {
    const resource = {
      title: file.title,
      parents: [{ id: targetFolderId }],
    };
    const newFile = Drive.Files.copy(resource, file.id, {
      supportsAllDrives: true,
    });
  });
};
google-apps-script
1个回答
0
投票

这只是我的猜测。从您的问题和以下回复来看,

是的 Drive api 服务已启用。没有消息错误。似乎我们无法在共享驱动器中复制 appscript 文件,或者我可能做错了什么。

我认为如果您的 Drive API 显示脚本适用于 Drive API v2,则

Drive.Files.list(params).files
返回未定义,并且会发生错误。但是,你说
There is no message error.
。从这种情况来看,我猜测您在高级Google服务中启用了Drive API v3。如果我的猜测是正确的,那么下面的修改怎么样?

修改后的脚本:

const copyResource = (sourceFolderId, targetFolderId) => {
  const params = {
    q: `'${sourceFolderId}' in parents and trashed = false and mimeType != 'application/vnd.google-apps.folder'`,
    supportsAllDrives: true,
    includeItemsFromAllDrives: true,
    corpora: "allDrives",
  };

  const files = Drive.Files.list(params).files;
  console.log(files);

  files.forEach((file) => {
    const resource = {
      name: file.name,
      parents: [targetFolderId],
    };
    const newFile = Drive.Files.copy(resource, file.id, {
      supportsAllDrives: true,
    });
    console.log(newFile);
  });
};

参考:

© www.soinside.com 2019 - 2024. All rights reserved.