【问题标题】:elixir upload file to google drive长生不老药上传文件到谷歌驱动器
【发布时间】:2016-11-21 18:43:53
【问题描述】:

我正在按照 google drive api google drive upload file api 的说明进行操作 这是我的请求正文

multipart_request_body = 
--1234567
Content-Type: application/json


{ name: "text.csv", mimeType: "text/csv"}
--1234567
Content-Length: 18
Content-Type: text/comma-separated-values
Content-Transfer-Encoding: binary


id,promo\n1,asdadas
--1234567--

和标题

headers = [{"Content-Type", "multipart/related; boundary=1234567"},
           {"Content-Length", byte_size(multipart_request_body)},
           {"Authorization","Bearer #{access_token}"}]`

和网址

api_url = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"

我正在使用HTTPoison 发出帖子请求:

response = HTTPoison.post!(api_url,multipart_request_body, headers)

我得到status_code: 200,返回的元数据是%{"id" => "0B6Xd6TBQkqUPM0s4TEY5SGRXcU0", "kind" => "drive#file", "mimeType" => "text/csv", "name" => "text.csv"}

但是当我检查我的谷歌驱动器时,该文件永远不存在,并且我无法使用返回 id 获取该文件。

我被困在这里好几个小时了,谁能帮忙看看这里出了什么问题?

【问题讨论】:

  • 您确定 access_token 与您检查 Google Drive 帐户的帐户相同吗?
  • 上传后尝试做一个files.list。 API 说它已上传。并为您提供已上传文件的文件 ID。很可能这是您正在使用的服务帐户,并且您上传到服务帐户驱动帐户。
  • @DaImTo 是的,我正在使用服务帐户上传文件,我如何查看服务帐户驱动帐户?

标签: google-drive-api elixir


【解决方案1】:

服务帐户不是你。将服务帐户视为虚拟用户。它有自己的云端硬盘帐户、Google 日历帐户,可能还有更多。

当您上传到服务帐户时,您将上传到服务帐户 Google 云端硬盘帐户。无法以图形方式访问服务帐户驱动器帐户,例如 Google 驱动器网站。

现在您有几个选择。

  1. 与服务帐户共享您的 google drive 帐户上的文件夹,并通过将您要上传的文件的父 ID 设置为您帐户上文件夹的 ID 来上传到该文件夹​​。与此相关的问题包括权限,服务帐户将拥有该文件,并且必须更新该文件的权限,以使您的个人拥有对其的 google 帐户访问权限。
  2. 让服务帐户在其帐户上创建一个目录,并与您的个人 Google 帐户共享该目录。与此相关的问题也是对相关文件的权限。仅仅因为您的个人帐户在将文件添加到目录时可以访问该目录,因此必须对它们进行修补以使您可以访问,这不是自动完成的。因此可以访问一个目录,但不能访问已上传到该目录的文件。
  3. 为服务帐户创建您自己的图形界面。使用 file.list 返回当前在驱动器帐户上的文件列表。

我的服务帐户教程Google Developer console service account 深入了解服务帐户的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 2016-08-26
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多