any_object_storage/lib.rs
1/*!
2# aliyun-oss-rust-sdk
3[](https://crates.io/crates/aliyun-oss-rust-sdk)
4
5阿里云 © Alibaba Cloud Official Oss SDK (标准库)
6
7[](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=dLoye8pBcO60zGzqLjGO0l-GgMIaf6wQ&authKey=LfxBdZ5A%2F9eWJbKpzTcuWPjmQu5UdIJ3TVTpqRAQYkCID50WLkYoIXcGxGKzupG3&noverify=0&group_code=799168925)
8
9# 使用指南
10
111. [文件下载](#文件下载)
122. [签名下载](#签名下载)
133. [签名上传](#签名上传)
144. [获取上传对象的policy](#获取上传对象的policy)
155. [上传本地文件](#上传本地文件)
166. [上传内存文件](#上传内存文件)
177. [文件删除](#文件删除)
188. [获取文件元信息](#获取文件元信息)
19
20添加依赖
21```toml
22[dependencies]
23# 异步
24aliyun-oss-rust-sdk = { version = "x.x.x"}
25
26# 同步
27aliyun-oss-rust-sdk = { version = "x.x.x", features = ["blocking"] }
28
29# debug日志开启
30aliyun-oss-rust-sdk = { version = "x.x.x", features = ["blocking","debug-print"] }
31```
32
33## 文件下载
34```rust
35use aliyun_oss_rust_sdk::oss::OSS;
36use aliyun_oss_rust_sdk::request::RequestBuilder;
37
38let oss = OSS::from_env();
39let build = RequestBuilder::new();
40let bytes = oss.get_object("/hello.txt", build).unwrap();
41println!("file content: {}", String::from_utf8_lossy(bytes.as_slice()));
42```
43
44### 签名下载
45自定义域名/限速下载/过期时间/自定义content-type
46```rust
47use aliyun_oss_rust_sdk::oss::{OSS,RequestBuilder};
48use aliyun_oss_rust_sdk::url::UrlApi;
49
50let oss = OSS::new(
51 "my_key_id",
52 "my_key_secret",
53 "oss-cn-shanghai.aliyuncs.com",
54 "my_bucket",
55 );
56let build = RequestBuilder::new()
57 .with_expire(60)
58 //.with_cdn("https://mydomain.com") //使用cdn后,无法限制ip访问
59 .oss_download_speed_limit(30);
60let download_url = oss.sign_download_url(
61 "/ipas/cn/-10/imem内存修改器_1.0.0.ipa",
62 &build,
63);
64println!("download_url: {}", download_url);
65```
66## 签名上传
67. 允许前端简单上传文件,精确控制请用功能4:获取上传对象的policy方式上传
68
69. 自定义域名/限速上传/过期时间/自定义content-type
70```rust
71use aliyun_oss_rust_sdk::oss::{OSS, RequestBuilder};
72use aliyun_oss_rust_sdk::url::UrlApi;
73
74let oss = OSS::from_env();//也可以使用OSS::new()方法传递参数
75let build = RequestBuilder::new()
76 //.with_cdn("https://mydomain.com")
77 .with_content_type("text/plain") //设置上传文件的content-type
78 .with_expire(60); //60秒链接过期
79let upload_url = oss.sign_upload_url(
80 "tmp.txt",
81 &build
82 );
83 println!("upload_url: {}", upload_url);
84//使用postman测试上传即可,PS:要注意content-type要和build中的一致
85```
86
87## 获取上传对象的policy
88用于前端直传可精确控制上传文件的类型、大小、过期时间、上传目录等
89```rust
90use aliyun_oss_rust_sdk::entity::PolicyBuilder;
91use aliyun_oss_rust_sdk::oss::OSS;
92
93let oss = OSS::from_env();
94let policy_builder = PolicyBuilder::new()
95 .with_expire(60 * 60)//1个小时过期
96 .with_upload_dir("upload/mydir/")//上传目录
97 .with_content_type("text/plain")//只允许上传文本.txt
98 .with_max_upload_size(100 * 1024 * 1024);//只允许文件上传大小1G以内
99let policy = oss.get_upload_object_policy(policy_builder).unwrap();
100println!("policy: {:?}", policy);
101//使用postman测试上传
102//form-data的参数为OSSAccessKeyId、policy、signature、success_action_status、key、file
103//key为上传的文件名包含路径、例如:upload/mydir/test.txt
104//file为上传的文件,类型跟with_content_type一致
105```
106
107## 上传本地文件
108```rust
109use aliyun_oss_rust_sdk::oss::OSS;
110use aliyun_oss_rust_sdk::request::RequestBuilder;
111
112let oss = OSS::from_env();
113let builder = RequestBuilder::new();
114let file_path = "./hello.txt";
115oss.put_object_from_file("/hello.txt", file_path, builder).unwrap();
116```
117## 上传内存文件
118```rust
119use aliyun_oss_rust_sdk::oss::OSS;
120use aliyun_oss_rust_sdk::request::RequestBuilder;
121
122let oss = OSS::from_env();
123let builder = RequestBuilder::new();
124let file_path = "./hello.txt";
125let buffer = std::fs::read(file_path).unwrap();
126oss.pub_object_from_buffer("/hello.txt", buffer.as_slice(), builder).unwrap();
127```
128## 文件删除
129```rust
130use aliyun_oss_rust_sdk::oss::OSS;
131use aliyun_oss_rust_sdk::request::RequestBuilder;
132
133let oss = OSS::from_env();
134let builder = RequestBuilder::new();
135oss.delete_object("/hello.txt", builder).unwrap();
136```
137## 获取文件元信息
138```rust
139use aliyun_oss_rust_sdk::oss::OSS;
140use aliyun_oss_rust_sdk::request::RequestBuilder;
141
142let oss = OSS::from_env();
143let builder = RequestBuilder::new();
144let meta = oss.get_object_metadata("/hello.txt", builder).unwrap();
145println!("meta: {:?}", meta);
146```
147 */
148pub mod auth;
149pub mod oss;
150pub mod request;
151pub mod url;
152pub mod metadata;
153mod util;
154
155#[cfg(feature = "blocking")]
156pub mod blocking;
157#[cfg(not(feature = "blocking"))]
158pub mod async_impl;
159pub mod entity;
160pub mod error;
161pub(crate) mod macros;