Struct aliyun_oss_client::client::Client
source · #[non_exhaustive]pub struct Client<M = ClientWithMiddleware>where
M: Default + Clone,{ /* private fields */ }Expand description
Implementations§
source§impl Client<ClientWithMiddleware>
impl Client<ClientWithMiddleware>
sourcepub async fn get_bucket_list(self) -> Result<ListBuckets, ExtractListError>
pub async fn get_bucket_list(self) -> Result<ListBuckets, ExtractListError>
从 OSS 获取 bucket 列表
sourcepub async fn base_bucket_list<List, Item, F, E, ItemErr>(
&self,
list: &mut List,
init_bucket: F
) -> Result<(), ExtractListError>where
List: RefineBucketList<Item, E, ItemErr>,
Item: RefineBucket<ItemErr>,
E: ListError,
ItemErr: ItemError,
F: FnMut() -> Item,
pub async fn base_bucket_list<List, Item, F, E, ItemErr>( &self, list: &mut List, init_bucket: F ) -> Result<(), ExtractListError>where List: RefineBucketList<Item, E, ItemErr>, Item: RefineBucket<ItemErr>, E: ListError, ItemErr: ItemError, F: FnMut() -> Item,
从 OSS 获取 bucket 列表,并存入自定义类型中
sourcepub async fn get_bucket_info(self) -> Result<Bucket, ExtractItemError>
pub async fn get_bucket_info(self) -> Result<Bucket, ExtractItemError>
从 OSS 上获取默认的 bucket 信息
sourcepub async fn base_bucket_info<Bucket, Name: Into<BucketName>, E>(
&self,
name: Name,
bucket: &mut Bucket
) -> Result<(), ExtractItemError>where
Bucket: RefineBucket<E>,
E: ItemError,
pub async fn base_bucket_info<Bucket, Name: Into<BucketName>, E>( &self, name: Name, bucket: &mut Bucket ) -> Result<(), ExtractItemError>where Bucket: RefineBucket<E>, E: ItemError,
从 OSS 上获取某一个 bucket 的信息,并存入自定义的类型中
source§impl Client<ClientWithMiddleware>
impl Client<ClientWithMiddleware>
sourcepub fn get_bucket_list(self) -> Result<ListBuckets<RcPointer>, ExtractListError>
pub fn get_bucket_list(self) -> Result<ListBuckets<RcPointer>, ExtractListError>
获取 bucket 列表
sourcepub fn base_bucket_list<List, Item, F, E, ItemErr>(
&self,
list: &mut List,
init_bucket: F
) -> Result<(), ExtractListError>where
List: RefineBucketList<Item, E, ItemErr>,
Item: RefineBucket<ItemErr>,
E: ListError,
ItemErr: ItemError,
F: FnMut() -> Item,
pub fn base_bucket_list<List, Item, F, E, ItemErr>( &self, list: &mut List, init_bucket: F ) -> Result<(), ExtractListError>where List: RefineBucketList<Item, E, ItemErr>, Item: RefineBucket<ItemErr>, E: ListError, ItemErr: ItemError, F: FnMut() -> Item,
获取 bucket 列表,可存储为自定义的类型
sourcepub fn get_bucket_info(self) -> Result<Bucket<RcPointer>, ExtractItemError>
pub fn get_bucket_info(self) -> Result<Bucket<RcPointer>, ExtractItemError>
获取当前的 bucket 的信息
sourcepub fn base_bucket_info<Bucket, Name: Into<BucketName>, E>(
&self,
name: Name,
bucket: &mut Bucket
) -> Result<(), ExtractItemError>where
Bucket: RefineBucket<E>,
E: ItemError,
pub fn base_bucket_info<Bucket, Name: Into<BucketName>, E>( &self, name: Name, bucket: &mut Bucket ) -> Result<(), ExtractItemError>where Bucket: RefineBucket<E>, E: ItemError,
获取某一个 bucket 的信息,并存储到自定义的类型
source§impl Client<ClientWithMiddleware>
impl Client<ClientWithMiddleware>
sourcepub async fn get_object_list<Q: IntoIterator<Item = (QueryKey, QueryValue)>>(
self,
query: Q
) -> Result<ObjectList, ExtractListError>
pub async fn get_object_list<Q: IntoIterator<Item = (QueryKey, QueryValue)>>( self, query: Q ) -> Result<ObjectList, ExtractListError>
查询默认 bucket 的文件列表
查询条件参数有多种方式,具体参考 get_object_list 文档
sourcepub async fn base_object_list<Name: Into<BucketName>, Q: IntoIterator<Item = (QueryKey, QueryValue)>, List, Item, F, E: ListError, ItemErr: ItemError>(
&self,
name: Name,
query: Q,
list: &mut List,
init_object: F
) -> Result<(), ExtractListError>where
List: RefineObjectList<Item, E, ItemErr>,
Item: RefineObject<ItemErr>,
F: FnMut() -> Item,
pub async fn base_object_list<Name: Into<BucketName>, Q: IntoIterator<Item = (QueryKey, QueryValue)>, List, Item, F, E: ListError, ItemErr: ItemError>( &self, name: Name, query: Q, list: &mut List, init_object: F ) -> Result<(), ExtractListError>where List: RefineObjectList<Item, E, ItemErr>, Item: RefineObject<ItemErr>, F: FnMut() -> Item,
可将 object 列表导出到外部类型
可以参考下面示例,或者项目中的 examples/custom.rs
示例
use aliyun_oss_client::{
decode::{ItemError, ListError, RefineObject, RefineObjectList},
object::ExtractListError,
Client,
};
use dotenv::dotenv;
use thiserror::Error;
#[derive(Debug)]
struct MyFile {
key: String,
#[allow(dead_code)]
other: String,
}
impl RefineObject<MyError> for MyFile {
fn set_key(&mut self, key: &str) -> Result<(), MyError> {
self.key = key.to_string();
Ok(())
}
}
#[derive(Default, Debug)]
struct MyBucket {
name: String,
files: Vec<MyFile>,
}
impl RefineObjectList<MyFile, MyError> for MyBucket {
fn set_name(&mut self, name: &str) -> Result<(), MyError> {
self.name = name.to_string();
Ok(())
}
fn set_list(&mut self, list: Vec<MyFile>) -> Result<(), MyError> {
self.files = list;
Ok(())
}
}
#[derive(Debug, Error)]
#[error("my error")]
enum MyError {}
impl ItemError for MyError {}
impl ListError for MyError {}
async fn run() -> Result<(), ExtractListError> {
dotenv().ok();
use aliyun_oss_client::BucketName;
let client = Client::from_env().unwrap();
// 除了设置Default 外,还可以做更多设置
let mut bucket = MyBucket::default();
// 利用闭包对 MyFile 做一下初始化设置
let init_file = || MyFile {
key: String::default(),
other: "abc".to_string(),
};
//let bucket_name = env::var("ALIYUN_BUCKET").unwrap();
let bucket_name = "abc".parse::<BucketName>().unwrap();
client
.base_object_list(bucket_name, [], &mut bucket, init_file)
.await?;
println!("bucket: {:?}", bucket);
Ok(())
}source§impl Client<ClientWithMiddleware>
impl Client<ClientWithMiddleware>
sourcepub fn get_object_list<Q: IntoIterator<Item = (QueryKey, QueryValue)>>(
self,
query: Q
) -> Result<ObjectList<RcPointer>, ExtractListError>
pub fn get_object_list<Q: IntoIterator<Item = (QueryKey, QueryValue)>>( self, query: Q ) -> Result<ObjectList<RcPointer>, ExtractListError>
查询默认 bucket 的文件列表
查询条件参数有多种方式,具体参考 get_object_list 文档
sourcepub fn base_object_list<Name: Into<BucketName>, Q: IntoIterator<Item = (QueryKey, QueryValue)>, List, Item, F, E: ListError, ItemErr: ItemError>(
&self,
name: Name,
query: Q,
list: &mut List,
init_object: F
) -> Result<(), ExtractListError>where
List: RefineObjectList<Item, E, ItemErr>,
Item: RefineObject<ItemErr>,
F: FnMut() -> Item,
pub fn base_object_list<Name: Into<BucketName>, Q: IntoIterator<Item = (QueryKey, QueryValue)>, List, Item, F, E: ListError, ItemErr: ItemError>( &self, name: Name, query: Q, list: &mut List, init_object: F ) -> Result<(), ExtractListError>where List: RefineObjectList<Item, E, ItemErr>, Item: RefineObject<ItemErr>, F: FnMut() -> Item,
可将 object 列表导出到外部 struct
source§impl<M: Default + Clone> Client<M>
impl<M: Default + Clone> Client<M>
sourcepub fn new(
access_key_id: KeyId,
access_key_secret: KeySecret,
endpoint: EndPoint,
bucket: BucketName
) -> Self
pub fn new( access_key_id: KeyId, access_key_secret: KeySecret, endpoint: EndPoint, bucket: BucketName ) -> Self
使用基本配置信息初始化 Client
sourcepub fn from_config(config: Config) -> Self
pub fn from_config(config: Config) -> Self
使用 Config 中的配置初始化 Client
sourcepub fn from_env() -> Result<Self, InvalidConfig>
pub fn from_env() -> Result<Self, InvalidConfig>
通过环境变量初始化 Client
示例
use std::env::set_var;
set_var("ALIYUN_KEY_ID", "foo1");
set_var("ALIYUN_KEY_SECRET", "foo2");
set_var("ALIYUN_ENDPOINT", "qingdao");
set_var("ALIYUN_BUCKET", "foo4");
use aliyun_oss_client::builder::ClientWithMiddleware;
let client = Client::<ClientWithMiddleware>::from_env();
assert!(client.is_ok());sourcepub fn get_bucket_base(&self) -> BucketBase
pub fn get_bucket_base(&self) -> BucketBase
返回默认可用区,默认 bucket 的 BucketBase
sourcepub fn get_bucket_url(&self) -> Url
pub fn get_bucket_url(&self) -> Url
获取默认的 bucket 的 url
sourcepub fn get_endpoint_url(&self) -> Url
pub fn get_endpoint_url(&self) -> Url
获取默认的可用区的 url
source§impl Client
impl Client
sourcepub fn get_object_base<P>(
&self,
path: P
) -> Result<ObjectBase, InvalidObjectPath>where
P: TryInto<ObjectPath>,
<P as TryInto<ObjectPath>>::Error: Into<InvalidObjectPath>,
pub fn get_object_base<P>( &self, path: P ) -> Result<ObjectBase, InvalidObjectPath>where P: TryInto<ObjectPath>, <P as TryInto<ObjectPath>>::Error: Into<InvalidObjectPath>,
根据默认的 bucket,endpoint 和提供的文件路径,获取 ObjectBase
Trait Implementations§
source§impl AlignBuilder for Client<BlockingClientWithMiddleware>
impl AlignBuilder for Client<BlockingClientWithMiddleware>
source§fn builder_with_header<H: IntoIterator<Item = (HeaderName, HeaderValue)>>(
&self,
method: Method,
url: Url,
resource: CanonicalizedResource,
headers: H
) -> Result<BlockingRequestBuilder, BuilderError>
fn builder_with_header<H: IntoIterator<Item = (HeaderName, HeaderValue)>>( &self, method: Method, url: Url, resource: CanonicalizedResource, headers: H ) -> Result<BlockingRequestBuilder, BuilderError>
向 OSS 发送请求的封装
参数包含请求的:
- method
- url
- headers (可选)
- CanonicalizedResource
返回值是一个 reqwest 的请求创建器 reqwest::blocking::RequestBuilder
返回后,可以再加请求参数,然后可选的进行发起请求
source§impl AlignBuilder for Client<ClientWithMiddleware>
impl AlignBuilder for Client<ClientWithMiddleware>
source§fn builder_with_header<H: IntoIterator<Item = (HeaderName, HeaderValue)>>(
&self,
method: Method,
url: Url,
resource: CanonicalizedResource,
headers: H
) -> Result<RequestBuilder, BuilderError>
fn builder_with_header<H: IntoIterator<Item = (HeaderName, HeaderValue)>>( &self, method: Method, url: Url, resource: CanonicalizedResource, headers: H ) -> Result<RequestBuilder, BuilderError>
构造自定义的接口请求方法
比如在上传完文件时,返回自己期望的数据,而不是仅返回 etag 信息
例子是一个获取 object 元信息的接口
use aliyun_oss_client::{errors::OssError, file::AlignBuilder, Client, Method};
use dotenv::dotenv;
async fn run() -> Result<(), OssError> {
dotenv().ok();
let client = Client::from_env().unwrap();
let (url, resource) = client
.get_object_base("9AB932LY.jpeg")?
.get_url_resource([]);
let headers = vec![(
"If-Unmodified-Since".parse().unwrap(),
"Sat, 01 Jan 2022 18:01:01 GMT".parse().unwrap(),
)];
let builder = client.builder_with_header(Method::HEAD, url, resource, headers)?;
let response = builder.send().await?;
println!("status: {:?}", response.status());
Ok(())
}参数
- method 接口请求方式
- url 要请求的接口,包含 query 参数等信息
- resource 阿里云接口需要提供的统一的信息,
CanonicalizedResource提供了 bucket ,object 等各种生成方式,如果无法满足 还可以自己用 trait 来自定义
返回值
返回值是一个封装了 reqwest::Builder 构造器,RequestBuilder, 提供两个方法 send 和 send_adjust_error
send方法,直接返回reqwest::Responsesend_adjust_error方法,会对 api 返回结果进行处理,如果 HTTP 状态码正常(200>= && <300) 则,返回 Ok, 否则,会对返回的 xml 异常数据进行解析,返回 Err(OssService)
source§impl<M: Default + Clone> AsRef<BucketName> for Client<M>
impl<M: Default + Clone> AsRef<BucketName> for Client<M>
source§fn as_ref(&self) -> &BucketName
fn as_ref(&self) -> &BucketName
Converts this type into a shared reference of the (usually inferred) input type.
source§impl<M: Default + Clone> STS for Client<M>
impl<M: Default + Clone> STS for Client<M>
source§fn new_with_sts<ST>(
access_key_id: KeyId,
access_key_secret: KeySecret,
endpoint: EndPoint,
bucket: BucketName,
security_token: ST
) -> Result<Self, InvalidHeaderValue>where
ST: TryInto<HeaderValue>,
<ST as TryInto<HeaderValue>>::Error: Into<InvalidHeaderValue>,
fn new_with_sts<ST>( access_key_id: KeyId, access_key_secret: KeySecret, endpoint: EndPoint, bucket: BucketName, security_token: ST ) -> Result<Self, InvalidHeaderValue>where ST: TryInto<HeaderValue>, <ST as TryInto<HeaderValue>>::Error: Into<InvalidHeaderValue>,
用 STS 配置信息初始化
ClientAuto Trait Implementations§
impl<M> RefUnwindSafe for Client<M>where M: RefUnwindSafe,
impl<M> Send for Client<M>where M: Send,
impl<M> Sync for Client<M>where M: Sync,
impl<M> Unpin for Client<M>where M: Unpin,
impl<M> UnwindSafe for Client<M>where M: UnwindSafe,
Blanket Implementations§
source§impl<P, T> Files<P> for Twhere
T: AlignBuilder + GetStdWithPath<P>,
impl<P, T> Files<P> for Twhere T: AlignBuilder + GetStdWithPath<P>,
source§const DEFAULT_CONTENT_TYPE: &'static str = "application/octet-stream"
const DEFAULT_CONTENT_TYPE: &'static str = "application/octet-stream"
默认的文件类型 Read more
source§fn put_file<P: Into<PathBuf> + AsRef<Path>>(
&self,
file_name: P,
path: Path
) -> Result<String, FileError>
fn put_file<P: Into<PathBuf> + AsRef<Path>>( &self, file_name: P, path: Path ) -> Result<String, FileError>
上传文件到 OSS Read more
source§fn put_content<F>(
&self,
content: Vec<u8>,
path: Path,
get_content_type: F
) -> Result<String, FileError>where
F: Fn(&Vec<u8>) -> Option<&'static str>,
fn put_content<F>( &self, content: Vec<u8>, path: Path, get_content_type: F ) -> Result<String, FileError>where F: Fn(&Vec<u8>) -> Option<&'static str>,
上传文件内容到 OSS Read more
source§fn put_content_base(
&self,
content: Vec<u8>,
content_type: &str,
path: Path
) -> Result<Response, FileError>
fn put_content_base( &self, content: Vec<u8>, content_type: &str, path: Path ) -> Result<Response, FileError>
最原始的上传文件的方法
source§fn get_object<R: Into<ContentRange>>(
&self,
path: Path,
range: R
) -> Result<Vec<u8>, FileError>
fn get_object<R: Into<ContentRange>>( &self, path: Path, range: R ) -> Result<Vec<u8>, FileError>
获取文件内容 Read more
source§impl<P, T> Files<P> for Twhere
P: Send + Sync + 'static,
T: AlignBuilder + GetStdWithPath<P>,
impl<P, T> Files<P> for Twhere P: Send + Sync + 'static, T: AlignBuilder + GetStdWithPath<P>,
source§const DEFAULT_CONTENT_TYPE: &'static str = "application/octet-stream"
const DEFAULT_CONTENT_TYPE: &'static str = "application/octet-stream"
默认的文件类型 Read more
source§fn put_file<'life0, 'async_trait, P>(
&'life0 self,
file_name: P,
path: Path
) -> Pin<Box<dyn Future<Output = Result<String, FileError>> + Send + 'async_trait>>where
P: 'async_trait + Into<PathBuf> + AsRef<Path> + Send + Sync,
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn put_file<'life0, 'async_trait, P>( &'life0 self, file_name: P, path: Path ) -> Pin<Box<dyn Future<Output = Result<String, FileError>> + Send + 'async_trait>>where P: 'async_trait + Into<PathBuf> + AsRef<Path> + Send + Sync, Self: Sync + 'async_trait, 'life0: 'async_trait,
上传文件到 OSS Read more
source§fn put_content<'life0, 'async_trait, F>(
&'life0 self,
content: Vec<u8>,
path: Path,
get_content_type: F
) -> Pin<Box<dyn Future<Output = Result<String, FileError>> + Send + 'async_trait>>where
F: Fn(&Vec<u8>) -> Option<&'static str> + Send + Sync + 'async_trait,
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn put_content<'life0, 'async_trait, F>( &'life0 self, content: Vec<u8>, path: Path, get_content_type: F ) -> Pin<Box<dyn Future<Output = Result<String, FileError>> + Send + 'async_trait>>where F: Fn(&Vec<u8>) -> Option<&'static str> + Send + Sync + 'async_trait, Self: Sync + 'async_trait, 'life0: 'async_trait,
上传文件内容到 OSS Read more
source§fn put_content_base<'life0, 'life1, 'async_trait>(
&'life0 self,
content: Vec<u8>,
content_type: &'life1 str,
path: Path
) -> Pin<Box<dyn Future<Output = Result<Response, FileError>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_content_base<'life0, 'life1, 'async_trait>( &'life0 self, content: Vec<u8>, content_type: &'life1 str, path: Path ) -> Pin<Box<dyn Future<Output = Result<Response, FileError>> + Send + 'async_trait>>where Self: Sync + 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
最核心的上传文件到 OSS 的方法
source§fn get_object<'life0, 'async_trait, R>(
&'life0 self,
path: Path,
range: R
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, FileError>> + Send + 'async_trait>>where
R: 'async_trait + Into<ContentRange> + Send + Sync,
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn get_object<'life0, 'async_trait, R>( &'life0 self, path: Path, range: R ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, FileError>> + Send + 'async_trait>>where R: 'async_trait + Into<ContentRange> + Send + Sync, Self: Sync + 'async_trait, 'life0: 'async_trait,
获取 OSS 上文件的部分或全部内容 Read more