10 个版本
0.4.6 | 2021年6月4日 |
---|---|
0.4.5 | 2021年1月14日 |
0.4.4 | 2020年11月2日 |
0.4.3 | 2020年10月23日 |
0.1.0 | 2019年9月20日 |
#598 in 文件系统
每月 35 次下载
110KB
1.5K SLoC
Google Drive 客户端 (Rocket)
这个库提供了一种使用服务帐户连接到 Google Drive API (v3) 的方法。您可以执行基本操作,如上传、列出或下载文件。此代码旨在与Rocket服务器一起使用,因为我们可以使用服务帐户提供对驱动器的访问,而不需要用户交互。对于其他用途,您可以使用其他库,如gooogle-drive3等。
依赖项
在您的项目中,您需要导入这些依赖项
# Rocket Webserver
[dependencies.google_drive_client]
version = "0.4.6"
如何使用它
您有一个提供者,您可以直接使用,例如以下示例
use google_drive_client::{GoogleDriveClient, DriveFileList, DriveFileSearchBuilder};
let gdrive_client: GoogleDriveClient = GoogleDriveClient::default();
let result = gdrive_client.find(DriveFileSearchBuilder::build()
.with_order_by("name")
.done());
let file_list:DriveFileList = result.unwrap();
在这个示例中,您可以看到我们如何获取按名称排序的驱动器上的文件列表。
另一个示例是使用 rocket,您可以使用 rocket管理客户端
let gdrive_client: GoogleDriveClient = GoogleDriveClient::default();
rocket.manage(gdrive_client);
然后您可以在控制器中使用它,例如
#[get("/storage/download_file/<file_id>")]
fn download_file(gdrive: State<GoogleDriveClient>, file_id: String) -> FileDownloadResponse {
let storage = gdrive.inner().clone();
storage.download_file(&file_id).unwrap()
}
在上一个示例中,我们使用了FileDownloadResponse
,该类型实现了来自 rocket 的Responder
,因此您可以直接使用它将文件内容直接放入响应中,这是一种解决文件响应的干净方式。
设置服务帐户
要使用此库,您需要一个 Google 服务帐户,当您拥有该服务帐户时,您将获得一个 json 格式的服务帐户,其中包含与 gdrive 进行身份验证的所有私有信息。此库会扫描一些位置以获取该文件,首先它会检查一个名为 GDRIVE_ACCOUNT_FILE_NAME
的环境变量,如果该变量存在,它应包含 json 文件的完整路径位置,如果该变量不存在,库将继续在主目录中进行扫描,应存在一个名为 service_account.json
的服务帐户 json 文件。如果这些选项都不可用,库将抛出错误。
设置共享帐户
由于服务账户不能直接拥有文件,因为它们不是真实账户,我们需要将此账户创建的文件共享给真实账户,才能在真实账户的驱动器中查看文件。为此,我们将文件与真实账户共享,为此,我们使用一个环境变量来设置该账户,该变量称为 GDRIVE_SHARE_ACCOUNT
,所有创建的文件和文件夹都将与此账户共享。如果没有设置此变量,则将创建文件但不会共享,因此您将在gdrive账户中看不到它们,但文件将存在。
多块上传支持
现在您可以使用Google提供的多块上传逻辑上传文件。基本上,您需要在客户端的配置中提供一个块大小。您可以这样操作
use google_drive_client::{GoogleDriveClient, DriveFileList, DriveFileSearchBuilder, GoogleDriveClientParams};
let gdrive_client: GoogleDriveClient = GoogleDriveClient::new(GoogleDriveClientParams {
request_timeout: Duration::from_secs(30),
chunk_size: Some(ChunkSize::new(10, ChunkSizeUnitType::MB)),
proxy: None
});
在示例中,您有一个10MB的块大小,因此如果您有一个20MB的文件,则该文件将以两个10MB的块上传。
代理支持
您可以通过指定参数中的代理在客户端配置代理,如下所示
use google_drive_client::{GoogleDriveClient, DriveFileList, DriveFileSearchBuilder, GoogleDriveClientParams};
let gdrive_client: GoogleDriveClient = GoogleDriveClient::new(GoogleDriveClientParams {
request_timeout: Duration::from_secs(30),
chunk_size: Some(ChunkSize::new(10, ChunkSizeUnitType::MB)),
proxy: Some("https://127.0.0.1:8888".to_string())
});
依赖项
~18–32MB
~520K SLoC