elixir上传文件到谷歌驱动器

时间:2016-11-21 09:54:50

标签: google-drive-api elixir

我按照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获取该文件。

我被困在这里好几个小时,有人可以帮忙解决这里的错误吗?

1 个答案:

答案 0 :(得分:0)

服务帐户不是您。将服务帐户视为虚拟用户。它有自己的驱动器帐户,谷歌日历帐户,可能还有更多。

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

现在你有几个选择。

  1. 使用服务帐户在您的Google云端硬盘帐户上共享一个文件夹,并通过将您上传的文件的父ID设置为您帐户中文件夹的ID来上传到该文件夹​​。这方面的问题包括权限,服务帐户将拥有该文件,并且必须更新文件的权限,以便为您的人员提供Google帐户访问权限。
  2. 让服务帐户在其帐户上创建一个目录,并与您的个人Google帐户共享该目录。与此相关的问题还包括对相关文件的权限。仅仅因为您的个人帐户在添加文件时可以访问该目录,所以必须对其进行修补以便您访问,这不是自动完成的。因此,可以访问目录,但不能访问已上载到目录中的文件。
  3. 为服务帐户创建自己的图形界面。使用file.list返回当前驱动器帐户上的文件列表。
  4. 我的服务帐户Google Developer console service account教程深入探讨了服务帐户的运作方式。

相关问题