如果文件是手动上传的原始文件名,或者是 如果文件是通过API插入的,则为原始标题。注意 标题的重命名不会更改原始文件名。这将 仅填充内容存储在云端硬盘中的文件。
我想插入一个带有标题和不同原始文件名的文件。根据(我的解释)文档,这将是一个两步的方法,首先插入文档,其标题应该成为原始文件名,然后执行修补程序来更改标题。这需要两个步骤来区分标题和原始文件名。这也意味着无法使用API更改原始文件名。
我错过了什么?,有没有更好的方法来设置原始文件名?
答案 0 :(得分:1)
当Google云端硬盘中的实际文件名称不同时,我们希望将修订文件的原始文件名保留在历史记录列表中。
我们希望使用静态名称和历史记录列表中的所有修订命名Google驱动器文件,以在其文件名中包含日期。
通过Google Drive API没有可用的直接功能。
出现的自然事物是通过API更新修订版的originalFilename字段(我们使用带有模块“googleapis”v3的NodeJS)
service.revisions.update(
{
fileId: <fileId>,
revisionId: <revisionId>,
resource: {
originalFilename : <revision file name>
}
}
)
但回应是:
{
Error: The resource body includes fields which are not directly writable.
code: 403,
errors:
{
domain: 'global',
reason: 'fieldNotWritable',
message: 'The resource body includes fields which are not directly writable.'
}
}
所以事实证明原始文件名字段在revisions.update上是可识别的,但不知何故不可更新 - 可能出于某种原因而故意这样做。
我们使用的实际设法达到初始目标的解决方法是以编程方式:
因此,如果我们有名为“GooleDriveFile.dat”的google驱动器文件,并且我们要上传名为GooleDriveFile_01012016.dat的修订版并将原始版本名称保留在历史记录列表中,我们可以通过编程方式进行:
1→将GooleDriveFile.dat中的google驱动器文件重命名为GooleDriveFile_01012016.dat
service.files.update(
{
fileId : <fileId>,
resource: {
name: "GooleDriveFile_01012016.dat",
},
fields : "id,headRevisionId"
}
)
2→将修订上传到Google云端硬盘
service.files.update(
{
fileId : <fileid>,
newRevision : true,
keepRevisionForever : true,
media: {
body: fs.createReadStream(<local path to the revision file>)
},
fields : "id,headRevisionId"
}
)
3→将google驱动器文件重命名为“GooleDriveFile.dat”
service.files.update(
{
fileId : <fileId>,
resource: {
name: "GooleDriveFile.dat",
},
fields : "id,headRevisionId"
}
)
答案 1 :(得分:0)
实际上,即使在执行insert()然后patch()时,我也无法返回originalFilename。当文档说“如果文件是手动上传的”时,我相信它指的是用户通过Drive Web UI上传文件。
最好在其他属性中记录原始文件名,例如indexableText或description。