6个版本

0.2.3 2024年3月11日
0.2.2 2022年5月12日
0.2.1 2021年6月16日
0.1.1 2021年6月2日

#68 in #amazon-s3

Download history 86/week @ 2024-03-12 11/week @ 2024-03-19 2/week @ 2024-03-26 19/week @ 2024-04-02 2/week @ 2024-05-28

每月下载量:151

MIT/Apache

26KB
457

Simple AWS S3

提供与AWS S3简单交互的方法。此包使用

此包正在开发中,等待Amazon的aws-sdk完全支持。

文档

https://docs.rs/simple-aws-s3

使用/示例

请参阅示例目录。

许可证

根据您的选择,在Apache License, Version 2.0MIT许可证下授权。
除非您明确表示,否则您提交给simple-aws-s3的任何贡献,根据Apache-2.0许可证的定义,将根据上述许可证双重授权,没有任何额外的条款或条件。

lib.rs:

Simple AWS S3

提供与AWS S3简单交互的方法。它使用reqwest执行请求。

此包正在开发中,等待Amazon的aws-sdk完全支持。

特性

  • 上传预签名(从浏览器上传)
  • 获取预签名(从浏览器下载)
  • 存储桶操作
  • 对象操作
    • 获取对象头(检索对象信息)
    • 删除对象

示例

use chrono::Duration; use reqwest::multipart::{Form, Part}; use reqwest::StatusCode; use simple_aws_s3::{PostPresignedInfo, S3};

// 在运行此示例之前,请将以下s3配置替换为您自己的配置。 const ACCESS_KEY: &str = "AKIAIOSFODNN7EXAMPLE"; const SECRET_KEY: &str = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"; const REGION: &str = "us-east-1"; const ENDPOINT: &str = "s3.amazonaws.com"; const BUCKET: &str = "examplebucket";

#tokio::main async fn main() { let s3 = S3::new(BUCKET, REGION, ENDPOINT, ACCESS_KEY, SECRET_KEY);

 let key = String::from("text.txt");
 let content = "Hello world";

 // Upload by Post Presigned
 let PostPresignedInfo { upload_url, params } = s3
     .generate_presigned_post(
         key.clone(),
         "plain/text",
         10485760,
         Duration::seconds(3600),
         None,
     )
     .unwrap();
 let mut form = Form::new();
 for (key, value) in params {
     form = form.text(key, value);
 }
 let part = Part::text(content).mime_str("plain/text").unwrap();
 form = form.part("file", part);
 let res = reqwest::Client::new()
     .post(&upload_url)
     .multipart(form)
     .send()
     .await
     .unwrap();
 assert_eq!(res.status(), StatusCode::NO_CONTENT);

 // Download by Query Param (Get Presigned)
 let download_url = s3.generate_presigned_get(&key, 3600).unwrap();
 let res = reqwest::Client::new()
     .get(&download_url)
     .send()
     .await
     .unwrap();
 assert_eq!(res.status(), StatusCode::OK);
 assert_eq!(res.text().await.unwrap(), content);

}

依赖项

~5–21MB
~284K SLoC