使用api不同的原始文件名和标题或更改原始文件名

时间:2012-12-05 12:31:37

标签: google-drive-api

来自API documentation

  

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

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

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

2 个答案:

答案 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上是可识别的,但不知何故不可更新 - 可能出于某种原因而故意这样做。

我们使用的实际设法达到初始目标的解决方法是以编程方式:

  1. 在上传修订版之前,将google驱动器文件重命名为修订版的文件名
  2. 将修订上传到google驱动器(现在修订版的originalFilename自动设置为我们在上一步中方便地重命名的实际文件名作为修订文件名)
  3. 将Google云端硬盘驱动器文件重命名为原始文件名
  4. 因此,如果我们有名为“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。