0

API 文档

如果文件是手动上传的,则为原始文件名;如果文件是通过 API 插入的,则为原始标题。请注意,重命名标题不会更改原始文件名。这只会在内容存储在云端硬盘中的文件上填充。

我想插入一个带有标题和不同原始文件名的文件。根据(我的解释)文档,这将是一个两步方法,首先插入标题应该成为原始文件名的文档,然后执行补丁来更改标题。这需要两个步骤来区分标题和原始文件名。这也意味着无法使用 API 更改原始文件名。

我错过了什么吗?有没有更好的方法来设置原始文件名?

4

2 回答 2

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.'
      } 
}

所以事实证明 originalFilename 字段在 revisions.update 上是可识别的,但不知何故不可更新 - 可能出于某种原因故意这样做。

我们使用的实际上设法实现我们最初目标的解决方法是以编程方式:

  1. 在上传修订之前,将 google drive 文件重命名为修订的文件名
  2. 将修订上传到谷歌驱动器(现在修订的 originalFilename 被自动设置为我们在上一步中方便地重命名为修订文件名的实际文件名)
  3. 将谷歌驱动器文件重命名为其原始文件名

因此,如果我们有名为“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"
      } 
) 
于 2016-01-29T12:34:40.027 回答
0

实际上,即使在执行 insert() 然后 patch() 时,我也无法让 originalFilename 返回。当文档说“如果文件是手动上传的”时,我相信它指的是用户通过 Drive Web UI 上传它。

您最好将原始文件名记录在 indexableText 或 description 等其他属性中。

于 2012-12-05T13:50:40.307 回答