mirror of
https://github.com/actix/examples
synced 2025-02-08 20:06:07 +01:00
example
This commit is contained in:
parent
5fb3d3270e
commit
c6b75d5006
3
multipart-s3/.env.example
Normal file
3
multipart-s3/.env.example
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_S3_BUCKET_NAME=
|
@ -17,3 +17,4 @@ bytes = { version = "0.5", features = ["serde"] }
|
|||||||
serde = { version = "1.0.104", features=["derive"] }
|
serde = { version = "1.0.104", features=["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
serde-value = "0.6.0"
|
serde-value = "0.6.0"
|
||||||
|
dotenv = "0.15.0"
|
@ -1,5 +1,8 @@
|
|||||||
use : https://github.com/rusoto/rusoto
|
use : https://github.com/rusoto/rusoto
|
||||||
|
|
||||||
|
https://www.rusoto.org/regions.html
|
||||||
|
https://docs.rs/rusoto_core/0.42.0/rusoto_core/enum.Region.html
|
||||||
|
|
||||||
1. set env AWS_ACCESS_KEY_ID
|
1. set env AWS_ACCESS_KEY_ID
|
||||||
2. set env AWS_SECRET_ACCESS_KEY
|
2. set env AWS_SECRET_ACCESS_KEY
|
||||||
3. set env AWS_S3_BUCKET_NAME
|
3. set env AWS_S3_BUCKET_NAME
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
extern crate dotenv;
|
||||||
use actix_multipart::Multipart;
|
use actix_multipart::Multipart;
|
||||||
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
||||||
|
use dotenv::dotenv;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
use std::borrow::BorrowMut;
|
use std::borrow::BorrowMut;
|
||||||
|
use std::env;
|
||||||
use utils::upload::{
|
use utils::upload::{
|
||||||
delete_object, save_file as upload_save_file, split_payload, UplodFile,
|
delete_object, save_file as upload_save_file, split_payload, UplodFile,
|
||||||
};
|
};
|
||||||
extern crate rusoto_core;
|
extern crate rusoto_core;
|
||||||
extern crate rusoto_s3;
|
extern crate rusoto_s3;
|
||||||
|
|
||||||
mod model {
|
mod model {
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
#[derive(Deserialize, Serialize, Debug)]
|
#[derive(Deserialize, Serialize, Debug)]
|
||||||
@ -19,6 +22,7 @@ mod model {
|
|||||||
pub number: i32,
|
pub number: i32,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn save_file(mut payload: Multipart) -> Result<HttpResponse, Error> {
|
async fn save_file(mut payload: Multipart) -> Result<HttpResponse, Error> {
|
||||||
let pl = split_payload(payload.borrow_mut()).await;
|
let pl = split_payload(payload.borrow_mut()).await;
|
||||||
println!("bytes={:#?}", pl.0);
|
println!("bytes={:#?}", pl.0);
|
||||||
@ -79,10 +83,19 @@ fn index() -> HttpResponse {
|
|||||||
|
|
||||||
#[actix_rt::main]
|
#[actix_rt::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
|
dotenv().ok();
|
||||||
|
let AWS_ACCESS_KEY_ID =
|
||||||
|
env::var("AWS_ACCESS_KEY_ID").expect("DATABASE_URL must be set");
|
||||||
|
let AWS_SECRET_ACCESS_KEY =
|
||||||
|
env::var("AWS_SECRET_ACCESS_KEY").expect("AWS_SECRET_ACCESS_KEY must be set");
|
||||||
|
let AWS_S3_BUCKET_NAME =
|
||||||
|
env::var("AWS_S3_BUCKET_NAME").expect("AWS_S3_BUCKET_NAME must be set");
|
||||||
|
|
||||||
|
println!("{}", AWS_ACCESS_KEY_ID);
|
||||||
|
println!("{}", AWS_SECRET_ACCESS_KEY);
|
||||||
|
println!("{}", AWS_S3_BUCKET_NAME);
|
||||||
|
|
||||||
std::env::set_var("RUST_LOG", "actix_server=info,actix_web=info");
|
std::env::set_var("RUST_LOG", "actix_server=info,actix_web=info");
|
||||||
std::env::set_var("AWS_ACCESS_KEY_ID", "your_key");
|
|
||||||
std::env::set_var("AWS_SECRET_ACCESS_KEY", "your_key");
|
|
||||||
std::env::set_var("AWS_S3_BUCKET_NAME", "your_key");
|
|
||||||
std::fs::create_dir_all("./tmp").unwrap();
|
std::fs::create_dir_all("./tmp").unwrap();
|
||||||
|
|
||||||
let ip = "0.0.0.0:3000";
|
let ip = "0.0.0.0:3000";
|
||||||
|
@ -77,8 +77,8 @@ pub async fn split_payload(payload: &mut Multipart) -> (bytes::Bytes, Vec<Tmpfil
|
|||||||
data = chunk.expect(" split_payload err chunk");
|
data = chunk.expect(" split_payload err chunk");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if content_type.get_filename() != None {
|
match content_type.get_filename() {
|
||||||
let filename = content_type.get_filename().unwrap();
|
Some(filename) => {
|
||||||
let tmp_file = Tmpfile::new(filename);
|
let tmp_file = Tmpfile::new(filename);
|
||||||
let tmp_path = tmp_file.tmp_path.clone();
|
let tmp_path = tmp_file.tmp_path.clone();
|
||||||
let mut f = web::block(move || std::fs::File::create(&tmp_path))
|
let mut f = web::block(move || std::fs::File::create(&tmp_path))
|
||||||
@ -92,6 +92,10 @@ pub async fn split_payload(payload: &mut Multipart) -> (bytes::Bytes, Vec<Tmpfil
|
|||||||
}
|
}
|
||||||
tmp_files.push(tmp_file.clone());
|
tmp_files.push(tmp_file.clone());
|
||||||
}
|
}
|
||||||
|
None => {
|
||||||
|
println!("file none");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(data, tmp_files)
|
(data, tmp_files)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user