mirror of
https://github.com/actix/examples
synced 2025-02-02 09:39:03 +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_json = "1.0"
|
||||
serde-value = "0.6.0"
|
||||
dotenv = "0.15.0"
|
@ -1,5 +1,8 @@
|
||||
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
|
||||
2. set env AWS_SECRET_ACCESS_KEY
|
||||
3. set env AWS_S3_BUCKET_NAME
|
||||
|
@ -1,16 +1,19 @@
|
||||
use std::io::Write;
|
||||
|
||||
extern crate dotenv;
|
||||
use actix_multipart::Multipart;
|
||||
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
||||
use dotenv::dotenv;
|
||||
use futures::StreamExt;
|
||||
mod utils;
|
||||
|
||||
use std::borrow::BorrowMut;
|
||||
use std::env;
|
||||
use utils::upload::{
|
||||
delete_object, save_file as upload_save_file, split_payload, UplodFile,
|
||||
};
|
||||
extern crate rusoto_core;
|
||||
extern crate rusoto_s3;
|
||||
|
||||
mod model {
|
||||
use serde::{Deserialize, Serialize};
|
||||
#[derive(Deserialize, Serialize, Debug)]
|
||||
@ -19,6 +22,7 @@ mod model {
|
||||
pub number: i32,
|
||||
}
|
||||
}
|
||||
|
||||
async fn save_file(mut payload: Multipart) -> Result<HttpResponse, Error> {
|
||||
let pl = split_payload(payload.borrow_mut()).await;
|
||||
println!("bytes={:#?}", pl.0);
|
||||
@ -79,10 +83,19 @@ fn index() -> HttpResponse {
|
||||
|
||||
#[actix_rt::main]
|
||||
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("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();
|
||||
|
||||
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");
|
||||
}
|
||||
} else {
|
||||
if content_type.get_filename() != None {
|
||||
let filename = content_type.get_filename().unwrap();
|
||||
match content_type.get_filename() {
|
||||
Some(filename) => {
|
||||
let tmp_file = Tmpfile::new(filename);
|
||||
let tmp_path = tmp_file.tmp_path.clone();
|
||||
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());
|
||||
}
|
||||
None => {
|
||||
println!("file none");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
(data, tmp_files)
|
||||
|
Loading…
x
Reference in New Issue
Block a user