#cloud-storage #active #backup #uploading #facilitate #migration #local

active-storage

Active Storage 简化了将文件上传到云存储的过程

2 个版本

0.1.1 2024年1月31日
0.1.0 2024年1月31日

#747文件系统

Apache-2.0

59KB
971

Active Storage

Active Storage 简化了将文件上传到云存储的过程,为开发和测试提供基于本地磁盘和内存的服务。此外,它还支持将文件镜像到从属服务,增强了备份和迁移功能。

它受到 Rails Active Store 的启发

服务

单存储使用示例

use std::path::PathBuf;
use active_storage::{drivers, StoreConfig};

#[tokio::main]
async fn main() {
    let config = drivers::aws_s3::Config {
        region: "us-east-1".to_string(),
        bucket: "test-bucket".to_string(),
        credentials: None,
    };
    let s3_driver = StoreConfig::AwsS3(config).build().await.unwrap();

    let file_path = PathBuf::from("test.txt");
    s3_driver
        .write(file_path.as_path(), b"my content")
        .await
        .unwrap();
}

镜像使用示例

use std::{collections::HashMap, path::PathBuf};
use active_storage::{drivers, multi_store::MultiStore, StoreConfig};

#[tokio::main]
async fn main() {
    let config = drivers::disk::Config {
        location: PathBuf::from("tmp").join("primary-storage"),
    };
    let store_one = StoreConfig::Disk(config).build().await.unwrap();

    let config = drivers::disk::Config {
        location: PathBuf::from("tmp").join("backups"),
    };
    let secondary_store = StoreConfig::Disk(config).build().await.unwrap();

    let mut multi_store = MultiStore::new(store_one);
    multi_store.add_stores(HashMap::from([("secondary", secondary_store)]));

    let _ = multi_store
        .mirror_stores_from_primary()
        .write(PathBuf::from("test").as_path(), b"content")
        .await;
}

依赖项

~0.3–6.5MB
~103K SLoC