使用服务帐户为 google 个驱动对象下载 link
download link for google drive object with service account
我正在构建一个使用 google 驱动器和服务帐户的 api。
Google Drive 对象带有一个 @web_view_link
属性,看起来像:
"https://drive.google.com/file/d/0B9eyEerjltIgZ2dyUTB1eGNjYUk/view?usp=drivesdk"
当我使用 个人帐户 在浏览器中访问此 @web_view_link
时,link 正常运行,可以从那里下载对象。
当我使用 服务帐户 在浏览器中粘贴 @web_view_link
时,Google 驱动器抱怨权限问题,我无法访问它,即使我正在通过帐户所有者访问。
是否可以使用服务帐户从 google 驱动器访问下载 link?
我正在使用 google-drive-ruby
gem,这是检索 @web_view_link
url:
的代码
def create_url
folder_name = Discourse.current_hostname
found = google_files.select { |f| f.id == id }
file_title = found.first.title
file_url = session.collection_by_title(folder_name).file_by_title(file_title).human_url
end
服务帐户不是您的个人帐户。服务帐户 belong to your application。确保在生成服务帐户并将角色设置为所有者或编辑者时启用了云端硬盘 API。
中的这段代码也可能有助于使用 ruby 中的服务帐户进行下载:
require 'googleauth'
require 'google/apis/drive_v2'
Drive = Google::Apis::DriveV2
upload_source = "/User/my_user_name/hacking.txt"
drive = Drive::DriveService.new
# Drive::AUTH_DRIVE is equal to https://www.googleapis.com/auth/drive
drive.authorization = Google::Auth.get_application_default([Drive::AUTH_DRIVE])
file = drive.insert_file({title: 'hacking.txt'}, upload_source: upload_source)
drive.get_file(file.id, download_dest: '/tmp/my_file.txt')
我正在构建一个使用 google 驱动器和服务帐户的 api。
Google Drive 对象带有一个 @web_view_link
属性,看起来像:
"https://drive.google.com/file/d/0B9eyEerjltIgZ2dyUTB1eGNjYUk/view?usp=drivesdk"
当我使用 个人帐户 在浏览器中访问此 @web_view_link
时,link 正常运行,可以从那里下载对象。
当我使用 服务帐户 在浏览器中粘贴 @web_view_link
时,Google 驱动器抱怨权限问题,我无法访问它,即使我正在通过帐户所有者访问。
是否可以使用服务帐户从 google 驱动器访问下载 link?
我正在使用 google-drive-ruby
gem,这是检索 @web_view_link
url:
def create_url
folder_name = Discourse.current_hostname
found = google_files.select { |f| f.id == id }
file_title = found.first.title
file_url = session.collection_by_title(folder_name).file_by_title(file_title).human_url
end
服务帐户不是您的个人帐户。服务帐户 belong to your application。确保在生成服务帐户并将角色设置为所有者或编辑者时启用了云端硬盘 API。
require 'googleauth'
require 'google/apis/drive_v2'
Drive = Google::Apis::DriveV2
upload_source = "/User/my_user_name/hacking.txt"
drive = Drive::DriveService.new
# Drive::AUTH_DRIVE is equal to https://www.googleapis.com/auth/drive
drive.authorization = Google::Auth.get_application_default([Drive::AUTH_DRIVE])
file = drive.insert_file({title: 'hacking.txt'}, upload_source: upload_source)
drive.get_file(file.id, download_dest: '/tmp/my_file.txt')