通过ruby在Google云端硬盘中创建文件夹时出错

时间:2013-07-31 15:04:27

标签: ruby-on-rails ruby google-drive-api

我在使用ruby中的google-drive-api库在Google云端硬盘中创建文件夹时遇到问题。 我可以成功登录,列出文件夹,甚至可以将文件添加到根文件夹。 我在根文件夹下有一个名为'Applications'的文件夹。列出所有文件显示该文件夹的id,我们称之为“0BwiVxEBt”。 在我的控制器中,我成功启动了谷歌驱动器连接(因为我能够列出所有文件),然后调用google_drive_connection.rb中的create_parent('Test')方法:

def create_folder (title)
file = @drive.files.insert.request_schema.new({
    'title' => title,
    'description' => title,
    'mimeType' => 'application/vnd.google-apps.folder'
})
file.parents = [{"id" => '0BwiVxEBt'}] # 0BwiVxEBt is id for Applications folder
media = Google::APIClient::UploadIO.new(title, 'application/vnd.google-apps.folder')
result = @client.execute(
        :api_method => @drive.files.insert,
        :body_object => file,
        :media => media,
        :parameters => {
            'uploadType' => 'multipart',
            #'convert' => false,
            'alt' => 'json'})
    if result.status == 200
        return result.data
    else
        puts "An error occurred: #{result.data['error']['message']}"
        return nil
    end
end

我在其他帖子中看到的插入文件夹就像文件插入(在这个rb文件中的ahother方法中工作正常),没有扩展名的标题,mimeType为'application / vnd.google- apps.folder'

错误:没有这样的文件或目录 - 测试

可能是一个小问题,但似乎无法找到它!

感谢您提供的任何指针/帮助。

修改 发现问题所以对于任何对解决方案感兴趣的人来说,对于文件夹你只需要在请求中发送元数据,不需要媒体部分,只需要正文(元数据)信息,所以我的'create_folder'方法导致:

def create_folder (title)
  file = @drive.files.insert.request_schema.new({
    'title' => title,
    'description' => title,
    'mimeType' => 'application/vnd.google-apps.folder'
  })
  file.parents = [{"id" => '0BwiVxEBt'}] # 0BwiVxEBt is id for Applications folder
  result = @client.execute(
        :api_method => @drive.files.insert,
        :body_object => file)
  if result.status == 200
    return result.data 
      else
    puts "An error occurred: #{result.data['error']['message']}"
    return nil
  end
end

1 个答案:

答案 0 :(得分:2)

找到我的问题的答案,在解决方案的原始问题中添加了编辑。简而言之,对于文件夹,只添加正文部分,而不是请求中的媒体部分。对于文件夹,只需要元数据。