右键单击并从Google驱动器复制文件时,它不会从旧文件中复制“属性”元数据。Documentation说:“具有空值的条目将在更新和复制请求中清除。”
这是否意味着默认操作“复制”,不从旧文件复制“属性”元数据?
这个答案怎么样?
[Google云端硬盘中的文件有2个属性。这些是appProperties
和properties
。 appProperties
和properties
是私有属性和非私有属性。用appProperties
设置的属性无法在其他应用程序中检索。另一方面,可以用其他应用程序检索用properties
设置的属性。
首先,为了说明,它假定通过包含appProperties
和properties
来创建示例文件。
当问题中显示的Drive API v3中的“文件:复制”方法用于此示例文件时,我可以确认没有复制appProperties
和properties
。此外,即使使用浏览器手动复制了示例文件,也不会复制appProperties
和properties
。我不确定这是错误还是当前的规范。
因此,作为使用“文件:复制”的方法复制appProperties
和properties
的当前解决方法,我想提出以下流程。
关于流程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' }
}
例如,在这种情况下,即使不包括description
,files.copy
也可以复制它。但是关于appProperties,properties
,似乎可以通过将其包含在元数据中来复制它们。