从API 文档:
如果文件是手动上传的,则为原始文件名;如果文件是通过 API 插入的,则为原始标题。请注意,重命名标题不会更改原始文件名。这只会在内容存储在云端硬盘中的文件上填充。
我想插入一个带有标题和不同原始文件名的文件。根据(我的解释)文档,这将是一个两步方法,首先插入标题应该成为原始文件名的文档,然后执行补丁来更改标题。这需要两个步骤来区分标题和原始文件名。这也意味着无法使用 API 更改原始文件名。
我错过了什么吗?有没有更好的方法来设置原始文件名?
从API 文档:
如果文件是手动上传的,则为原始文件名;如果文件是通过 API 插入的,则为原始标题。请注意,重命名标题不会更改原始文件名。这只会在内容存储在云端硬盘中的文件上填充。
我想插入一个带有标题和不同原始文件名的文件。根据(我的解释)文档,这将是一个两步方法,首先插入标题应该成为原始文件名的文档,然后执行补丁来更改标题。这需要两个步骤来区分标题和原始文件名。这也意味着无法使用 API 更改原始文件名。
我错过了什么吗?有没有更好的方法来设置原始文件名?
当 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.'
}
}
所以事实证明 originalFilename 字段在 revisions.update 上是可识别的,但不知何故不可更新 - 可能出于某种原因故意这样做。
我们使用的实际上设法实现我们最初目标的解决方法是以编程方式:
因此,如果我们有名为“GooleDriveFile.dat”的谷歌驱动器文件,并且我们想要上传名为 GooleDriveFile_01012016.dat 的修订版并将原始修订版名称保留在历史列表中,我们可以通过编程方式:
1-> 将 Google 驱动器文件从 GooleDriveFile.dat 重命名为 GooleDriveFile_01012016.dat
service.files.update(
{
fileId : <fileId>,
resource: {
name: "GooleDriveFile_01012016.dat",
},
fields : "id,headRevisionId"
}
)
2-> 将修订上传到谷歌驱动器
service.files.update(
{
fileId : <fileid>,
newRevision : true,
keepRevisionForever : true,
media: {
body: fs.createReadStream(<local path to the revision file>)
},
fields : "id,headRevisionId"
}
)
3-> 将谷歌驱动器文件重命名为“GooleDriveFile.dat”
service.files.update(
{
fileId : <fileId>,
resource: {
name: "GooleDriveFile.dat",
},
fields : "id,headRevisionId"
}
)
实际上,即使在执行 insert() 然后 patch() 时,我也无法让 originalFilename 返回。当文档说“如果文件是手动上传的”时,我相信它指的是用户通过 Drive Web UI 上传它。
您最好将原始文件名记录在 indexableText 或 description 等其他属性中。