Google云端硬盘“进行复制”不会复制“属性”元数据

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

右键单击并从Google驱动器复制文件时,它不会从旧文件中复制“属性”元数据。Documentation说:“具有空值的条目将在更新和复制请求中清除。”

这是否意味着默认操作“复制”,不从旧文件复制“属性”元数据?

google-drive-api copy
1个回答
0
投票

这个答案怎么样?

问题和解决方法:

[Google云端硬盘中的文件有2个属性。这些是appPropertiespropertiesappPropertiesproperties是私有属性和非私有属性。用appProperties设置的属性无法在其他应用程序中检索。另一方面,可以用其他应用程序检索用properties设置的属性。

首先,为了说明,它假定通过包含appPropertiesproperties来创建示例文件。

当问题中显示的Drive API v3中的“文件:复制”方法用于此示例文件时,我可以确认没有复制appPropertiesproperties。此外,即使使用浏览器手动复制了示例文件,也不会复制appPropertiesproperties。我不确定这是错误还是当前的规范。

因此,作为使用“文件:复制”的方法复制appPropertiesproperties的当前解决方法,我想提出以下流程。

  1. [通过包含appProperties和属性创建示例文件。
  2. 从创建的文件中检索文件元数据。
  3. 通过包含文件元数据来复制文件。

关于流程1,当您已经拥有文件时,请删除它。

示例脚本:

[当我看到您的其他问题时,我确认您已将googleapis与Node.js结合使用。所以在这里,我想使用带有Node.js的googleapis提出示例脚本。

const drive = google.drive({version: "v3", auth});

// 1. Create a sample file by including appProperties and properties.
const created = await drive.files.create({
  resource: {
    name: "sampleFile.txt",
    mimeType: "text/plain",
    appProperties: {key1: "value1"},
    properties: {key2: "value2"},
    description: "sample description",
  },
  fields: "id,name,appProperties,properties,description",
});
const fileId = created.data.id;
console.log("--- 1. Created sample file");
console.log(created.data);

// 2. Retrieve the file metadata from the created file.
const metadata = await drive.files.get({
  fileId: fileId,
  fields: "name,appProperties,properties",
});
// metadata.data.name = "updated name"; // When you want to update the filename, you can use this.
console.log("--- 2. Metadata of created file.");
console.log(metadata.data);

// 3. Copy the file by including the file metadata.
const res = await drive.files.copy({
  fileId: fileId,
  resource: metadata.data,
  fields: "appProperties,properties,description",
});
console.log("--- 3. Copied sample file");
console.log(res.data);
  • 运行此脚本时,返回以下结果。从返回的值中发现appProperties,properties已被复制。

    --- 1. Created sample file
    {
      id: '###',
      name: 'sampleFile.txt',
      description: 'sample description',
      properties: { key2: 'value2' },
      appProperties: { key1: 'value1' }
    }
    --- 2. Metadata of created file.
    {
      name: 'sampleFile.txt',
      properties: { key2: 'value2' },
      appProperties: { key1: 'value1' }
    }
    --- 3. Copied sample file
    {
      description: 'sample description',
      properties: { key2: 'value2' },
      appProperties: { key1: 'value1' }
    }
    
  • 例如,在这种情况下,即使不包括descriptionfiles.copy也可以复制它。但是关于appProperties,properties,似乎可以通过将其包含在元数据中来复制它们。

注意:

  • 我在Google问题跟踪器中搜索了此问题。但是我找不到。那么,如何将此问题作为错误报告给Google问题跟踪器呢? Ref

参考:

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