通过REST v3上传的文件显示为;无标题;

通过REST v3上传的文件显示为;无标题;,rest,google-api,google-drive-api,Rest,Google Api,Google Drive Api,我正在尝试通过REST(无SDK)在驱动器中创建文件,遵循官方API: 因此,我遵循两个步骤: 创建文件元数据(名称等) 上传文件内容 第二步很有魅力,但是我在第一步中遇到了一些问题。Mime类型设置得很好,但对于名称,无论实际名称或类型如何,我总是得到“无标题”文件 首先,我尝试了这个: POST https://www.googleapis.com/upload/drive/v3/files Authorization: Bearer <OAuth 2.0 access token

我正在尝试通过REST(无SDK)在驱动器中创建文件,遵循官方API:

因此,我遵循两个步骤:

  • 创建文件元数据(名称等)
  • 上传文件内容
  • 第二步很有魅力,但是我在第一步中遇到了一些问题。Mime类型设置得很好,但对于名称,无论实际名称或类型如何,我总是得到“无标题”文件

    首先,我尝试了这个:

    POST https://www.googleapis.com/upload/drive/v3/files
    Authorization: Bearer <OAuth 2.0 access token here>
    Content-Type: image/png
    
    {
      "name": "test123.png"
    }
    
    当我在代码中尝试这一点时,我收到了400个错误的请求。当然,我还添加了承载令牌身份验证


    我觉得我错过了什么。。。有人能帮忙吗?

    如果您成功地从API资源管理器发布了元数据,然后您的代码发出了完全相同的请求,那么当然它必须工作

    您获得标题为“Untitled”的文件的原因是您正在发布到content endpoint。你说的是“嘿,谷歌,用这个内容创建一个新的文件(帖子),但是没有元数据”

    根据您提供的代码片段,我猜您使用了错误的内容类型。对于元数据post(),
    内容类型始终是
    application/json
    。生成的驱动器文件的mime类型应由json中的mime type属性设置


    我建议您后退一步,确保您了解,在驱动器中,文件(由其元数据表示)与文件内容是分开的。阅读“多部分上传”如果你想在一次呼叫中同时提供这两种服务,或者更好,因为它是一个映像,请阅读关于可恢复上传的内容。

    我也遇到了这个问题。我认为有3种解决方案:

  • 对文件元数据和实际文件使用具有不同标题的
    多部分上载

  • 在两个请求中上载文件。首先使用元数据创建空文件(响应将提供文件的id),然后实际“更新”文件

  • 使用
    可恢复上传
    。第一个请求是“设置元数据”(甚至不会创建空文件),并获取“特殊链接”,在该链接中发送上传实际文件的请求。这种方法还有其他一些特性,比如分块上传

  • 下面是与Angular 2中可恢复上传的实现有关的另一个问题的链接


    我希望它可能有用。

    在我的例子中,Google Drive中的无标题文件仅为发布apk而创建。通过更新proguard规则进行修复。我为Google Drive REST API添加了规则:

    -keep class com.google.** { *;}
    -keep class com.fasterxml.** { *;}
    

    为了确保这一点,我还尝试了使用“title”属性,就像在v2中一样,但没有帮助。如果您检查Files.create,它需要一个uploadType参数,而您在POST请求正文中没有提供该参数。感谢您提供的“name”:“test123.png”部分,因为大多数示例都显示“title”。对我来说,当我从“title”改为“name”时,它起了作用,并且再次-谢谢:)是的,是正确的端点,在不同的尝试之间,我发现我提供了无效的JSON。。。脸红。你知道为什么没有提到内容端点吗?关于多部分和可恢复上传,我检查了它们,但指南建议使用较小的文件进行单次上传-甚至我的图像每个最多20万张-所以我选择了这一点,对吗?虽然发布到内容端点可以工作,但创建没有标题的文件很少有意义,因此没有广泛的文档记录以避免混淆。我同意这是正确的答案,不需要可恢复的上传,但它会使应用程序的大小增加~4MB!:-(
    -keep class com.google.** { *;}
    -keep class com.fasterxml.** { *;}