1
0
mirror of https://github.com/actix/examples synced 2025-02-02 09:39:03 +01:00
This commit is contained in:
cheolgyu 2020-02-06 10:06:41 +09:00
parent 5fb3d3270e
commit c6b75d5006
5 changed files with 40 additions and 16 deletions

View File

@ -0,0 +1,3 @@
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET_NAME=

View File

@ -16,4 +16,5 @@ rusoto_core = "0.42.0"
bytes = { version = "0.5", features = ["serde"] }
serde = { version = "1.0.104", features=["derive"] }
serde_json = "1.0"
serde-value = "0.6.0"
serde-value = "0.6.0"
dotenv = "0.15.0"

View File

@ -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

View File

@ -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";

View File

@ -77,20 +77,24 @@ 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();
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))
.await
.unwrap();
while let Some(chunk) = field.next().await {
let data = chunk.unwrap();
f = web::block(move || f.write_all(&data).map(|_| f))
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))
.await
.unwrap();
while let Some(chunk) = field.next().await {
let data = chunk.unwrap();
f = web::block(move || f.write_all(&data).map(|_| f))
.await
.unwrap();
}
tmp_files.push(tmp_file.clone());
}
None => {
println!("file none");
}
tmp_files.push(tmp_file.clone());
}
}
}