使用google-drive-ruby gem在google驱动器中创建文件夹

时间:2013-04-03 21:07:31

标签: ruby google-drive-api

我知道这里有一个类似的问题,但是由于我的情况有点不同,我仍然无法完成这项工作。 我希望能够使用google-drive-ruby gem在Google云端硬盘中创建一个文件夹。

根据谷歌(https://developers.google.com/drive/folder)使用“云端硬盘”Api,您可以通过插入mime-type“application / vnd.google-apps.folder”文件来创建文件夹

e.g。

POST https://www.googleapis.com/drive/v2/files
Authorization: Bearer {ACCESS_TOKEN}
Content-Type: application/json
...
{
  "title": "pets",
  "parents": [{"id":"0ADK06pfg"}]
  "mimeType": "application/vnd.google-apps.folder"
}

在我的情况下,我希望能够做同样的事情,但在使用google_drive API时。它有upload_from_file选项,它接受mime-type选项,但是这对我来说仍然不起作用,到目前为止我得到的最好结果是执行以下代码时是来自Google的此错误消息。

session.upload_from_file(“test.zip”,“test”,:content_type =>“application / vnd.google-apps.folder”)

  

“Mime-type application / vnd.google-apps.folder无效。文件不能   使用Google mime-types创建。

如果你能给我任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:8)

实际上非常简单。 Google云端硬盘中的文件夹是http://gimite.net/doc/google-drive-ruby/GoogleDrive/Collection.html中的GoogleDrive::Collectiongoogle-drive-ruby gem)。因此,您可以使用google-drive-ruby首先创建一个文件,然后通过GoogleDrive::Collection#add(file)方法将其添加到集合中。

这也模仿了Google云端硬盘的实际工作方式:将文件上传到根集合/文件夹,然后将其添加到其他馆藏/文件夹。

这是我编写的一些示例代码。它应该可以工作 - 根据您提供的上下文,可能会对您的特定用例进行一些小调整:

# this example assumes the presence of an authenticated
# `GoogleDrive::Session` referenced as `session`
# and a file named `test.zip` in the same directory
# where this example is being executed

# upload the file and get a reference to the returned
# GoogleSpreadsheet::File instance
file = session.upload_from_file("test.zip", "test")

# get a reference to the collection/folder to which
# you want to add the file, via its folder name
folder = session.collection_by_title("my-folder-name")

# add the file to the collection/folder. 
# note, that you may add a file to multiple folders
folder.add(file)

此外,如果您只想创建一个新文件夹,而不在其中放入任何文件,那么只需将其添加到根集合中:

session.root_collection.create_subcollection("my-folder-name")