如何从谷歌驱动器下载返回文件对象

时间:2017-09-07 18:11:35

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

我是Rails的新手。

我有一种从谷歌驱动器下载文件并将其保存在本地光盘中的方法。下载文件后,控制台将返回null,但该文件位于文件夹中。

我需要在我的控制器中使用此文件,但如果下载方法返回nil,我无法将其作为对象传递。

下载方法:

nil

控制器:

def download
  found = google_files.select { |f| f.id == file_id }
  file_title = found.first.title
  file = session.file_by_title(file_title)
  path = File.join(Backup.base_directory, file_title)
  file.download_to_file("#{path}")
end
执行下载方法后

控制台输出:

def create
  # file_id = params.fetch(:file_id)
  file_id = "0Byyflt8z3jarbm5DZGNNVXZSWjg"
  @backup = DiscourseDownloadFromDrive::DriveDownloader.new(file_id).download
end

记录器:

[...]
Writing chunk (1397 bytes)
Writing chunk (1397 bytes)
Writing chunk (1397 bytes)
Writing chunk (619 bytes)
Success - nil

=> nil
[4] pry(main)>

非常感谢任何有关如何处理此事的提示!

1 个答案:

答案 0 :(得分:3)

您的download方法始终只返回nil。这是因为宝石download_to_file总是返回nil

你应该改变你的download方法来返回一些东西,你可以用它来获取文件。我认为这个方法应该返回下载文件的路径。

def download
  found = google_files.select { |f| f.id == file_id }
  file_title = found.first.title
  file = session.file_by_title(file_title)
  path = File.join(Backup.base_directory, file_title)
  file.download_to_file("#{path}")
  path
end

现在您可以在控制器中使用它:

def create
  # file_id = params.fetch(:file_id)
  file_id = "0Byyflt8z3jarbm5DZGNNVXZSWjg"
  file_path = DiscourseDownloadFromDrive::DriveDownloader.new(file_id).download
  @backup = File.open(file_path) # do whatever you want with the file, since now you know how to get it
end