【问题标题】:Create a folder shortcut in another folder using javascript and Google api v3使用 javascript 和 Google api v3 在另一个文件夹中创建文件夹快捷方式
【发布时间】:2020-06-16 19:01:57
【问题描述】:

我正在尝试使用 javascript 和 google api v3 在我的驱动器的另一个文件夹中创建文件夹的快捷方式,Google 提供的代码是这样的,但它不起作用...实际上,我没有甚至不明白。有人可以帮我吗?:

var fileMetadata = {
  'name': 'Project Plan',
  'mimeType': 'text/plain'
};
drive.files.create({
  'resource': fileMetadata,
  'fields': 'id'
}, function (err, file) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    console.log('File Id: ' + file.id);
    shortcutMetadata = {
      'name': 'Shortcut to Project Plan',
      'mimeType': 'application/vnd.google-apps.shortcut'
      'shortcutDetails': {
        'targetId': file.id
      }
    };
    drive.files.create({
      'resource': shortcutMetadata,
      'fields': 'id,name,mimeType,shortcutDetails'
    }, function(err, shortcut) {
      if (err) {
        // Handle error
        console.error(err);
      } else {
        console.log('Shortcut Id: ' + shortcut.id +
                    ', Name: ' + shortcut.name +
                    ', target Id: ' + shortcut.shortcutDetails.targetId +
                    ', target MIME type: ' + shortcut.shortcutDetails.targetMimeType);
      }
    }
  }
});

创建文件夹结构的迭代过程示例:

  function crearIterativo(original,destino){
          //listo las carpetas que tengo en el original
          gapi.client.drive.files.list({
            'pageSize': 300,
            'q': "mimeType = 'application/vnd.google-apps.folder' and trashed = false and '"+original+"' in parents ",
            'fields': "nextPageToken, files(id, name, parents)"
          }).then(function(response) {
            var files = response.result.files;
            if (files && files.length > 0) {
              for (var i = 0; i < files.length; i++) { //Para cada carpeta encontrada, la creo en destino:
                var file = files[i];
                //informo
                appendPre(file.name + ' (' + file.id + ')' + ' ['+file.parents +']');
                arrayFoldOrig[file.name]=file.id;
                //creo carpeta
                var fileMetadata = {
                  'name' : file.name,
                  'mimeType' : 'application/vnd.google-apps.folder',
                  'parents': [destino]
                };
                gapi.client.drive.files.create({
                  resource: fileMetadata,
                }).then(function(respons) {
                  switch(respons.status){
                    case 200://si va bien, entonces crea estructura
                      var file2 = respons.result;
                      console.log('Created Folder Id: ', file2.id);
                      console.log('Llamo iterativo: ', file2.id);
                      crearIterativo(arrayFoldOrig[file2.name],file2.id);
                      break;
                    default:
                      console.log('Error creating the folder, '+response);
                      break;
                    }
                });
              //
              }
            } else {
              //appendPre('No files found.');
            }
          });
        }

【问题讨论】:

  • 我可以问你关于你的问题吗? 1. 可以问一下it doesn't work...actually的详细信息吗? 2.在你的脚本中,drive.files.create中的drive可以用来创建快捷方式吗?即你的授权脚本已经可以使用了? 3. 我能问你剧本的语言吗?是 Javascript 还是 Node.js?
  • 也许我应该首先回答最后一个问题:我正在使用 javascript,并且提供的代码适用于 Node.js,所以我进行了调整,但它仍然不起作用,它没有'不创建快捷方式既不记录错误。关于许可,是的,我在复制文件夹和创建新文件夹方面做得很好。但是我的主要问题是我看不懂代码,而且关于它的信息很少,所以我无法追踪错误。
  • 感谢您的回复。我想确认您的问题以正确理解它。在您的问题中, 1. 您想将 Node.js 的脚本转换为 Javascript。 2. 您已经完成了授权使用 API 和 Javascript 的范围的脚本。我的理解正确吗?
  • 正确,我在帖子中添加了一个示例,说明我使用 API 使用迭代过程复制文件夹结构的方式。它比创建快捷方式复杂得多,而且效果很好!总而言之,我需要知道如何为快捷方式正确设置元数据...
  • 感谢您的回复。从您的回复中,我提出了修改点作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您期望的方向,我深表歉意。

标签: javascript api shortcut drive


【解决方案1】:

我相信你的目标如下。

  • 您想使用 Javascript 创建快捷方式。
  • 您已经完成了使用 Drive API 创建文件的授权过程。
  • 您想了解如何创建用于创建快捷方式的元数据。
  • 在您的脚本中,您希望使用gapi.client.drive.files.create 创建快捷方式。

对于这个,这个答案怎么样?

修改后的脚本:

请按如下方式修改您的脚本。

从:
var fileMetadata = {
  'name' : file.name,
  'mimeType' : 'application/vnd.google-apps.folder',
  'parents': [destino]
};
至:
const targetId = "###"; // Please set the target file ID or folder ID.
var fileMetadata = {
  'name': file.name,
  'mimeType': 'application/vnd.google-apps.shortcut',  // Modified
  'parents': [destino],
  'shortcutDetails': {'targetId': targetId},  // Added
};
  • 请使用application/vnd.google-apps.shortcut 作为mimeType。
  • 请将目标文件ID或文件夹ID设置为targetId。例如,当您要创建文件夹A的快捷方式时,请将文件夹A的文件夹ID设置为targetId
  • 在上述情况下,快捷方式创建到文件夹 ID 为 destino 的文件夹。

参考资料:

【讨论】:

  • @Fernando De Palma Madrid 欢迎您。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
  • 我想我已经完成了(单击您的答案旁边的确定按钮?)其他情况请告诉我。再次,非常感谢。对不起,我的回答很慢,但我不得不暂时退出我的项目,我尽快回来了。祝你好运!!
  • @Fernando De Palma Madrid 感谢您的回复!
猜你喜欢
  • 2019-05-02
  • 2016-07-14
  • 1970-01-01
  • 2016-05-15
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2011-04-29
相关资源
最近更新 更多