mirror of
https://github.com/actix/examples
synced 2024-11-23 22:41:07 +01:00
update aws-sdk deps
This commit is contained in:
parent
0de1c02762
commit
1027b6e1fb
682
Cargo.lock
generated
682
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -8,8 +8,8 @@ actix-multipart.workspace = true
|
|||||||
actix-web.workspace = true
|
actix-web.workspace = true
|
||||||
actix-web-lab.workspace = true
|
actix-web-lab.workspace = true
|
||||||
|
|
||||||
aws-config = "0.56"
|
aws-config = "0.57"
|
||||||
aws-sdk-s3 = "0.34"
|
aws-sdk-s3 = "0.35"
|
||||||
|
|
||||||
dotenvy.workspace = true
|
dotenvy.workspace = true
|
||||||
env_logger.workspace = true
|
env_logger.workspace = true
|
||||||
@ -18,3 +18,4 @@ log.workspace = true
|
|||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
tokio = { workspace = true, features = ["io-util", "fs"] }
|
tokio = { workspace = true, features = ["io-util", "fs"] }
|
||||||
|
tokio-util = "0.7"
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use actix_web::{error, web::Bytes, Error};
|
|
||||||
use aws_config::SdkConfig as AwsConfig;
|
use aws_config::SdkConfig as AwsConfig;
|
||||||
use aws_sdk_s3::{primitives::ByteStream, Client as S3Client};
|
use aws_sdk_s3::{primitives::ByteStream, Client as S3Client};
|
||||||
use futures_util::{stream, Stream, StreamExt as _, TryStreamExt as _};
|
use futures_util::{stream, StreamExt as _};
|
||||||
use tokio::{fs, io::AsyncReadExt as _};
|
use tokio::{fs, io::AsyncReadExt as _};
|
||||||
|
|
||||||
use crate::{TempFile, UploadedFile};
|
use crate::{TempFile, UploadedFile};
|
||||||
@ -32,10 +31,7 @@ impl Client {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn fetch_file(
|
pub async fn fetch_file(&self, key: &str) -> Option<(u64, ByteStream)> {
|
||||||
&self,
|
|
||||||
key: &str,
|
|
||||||
) -> Option<(u64, impl Stream<Item = Result<Bytes, actix_web::Error>>)> {
|
|
||||||
let object = self
|
let object = self
|
||||||
.s3
|
.s3
|
||||||
.get_object()
|
.get_object()
|
||||||
@ -50,7 +46,7 @@ impl Client {
|
|||||||
.content_length()
|
.content_length()
|
||||||
.try_into()
|
.try_into()
|
||||||
.expect("file has invalid size"),
|
.expect("file has invalid size"),
|
||||||
object.body.map_err(error::ErrorInternalServerError),
|
object.body,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +54,7 @@ impl Client {
|
|||||||
&self,
|
&self,
|
||||||
temp_files: Vec<TempFile>,
|
temp_files: Vec<TempFile>,
|
||||||
key_prefix: &str,
|
key_prefix: &str,
|
||||||
) -> Result<Vec<UploadedFile>, Error> {
|
) -> actix_web::Result<Vec<UploadedFile>> {
|
||||||
let uploaded_files = stream::iter(temp_files)
|
let uploaded_files = stream::iter(temp_files)
|
||||||
.map(|file| self.upload_and_remove(file, key_prefix))
|
.map(|file| self.upload_and_remove(file, key_prefix))
|
||||||
// upload files concurrently, up to 2 at a time
|
// upload files concurrently, up to 2 at a time
|
||||||
|
@ -56,7 +56,10 @@ async fn fetch_from_s3(
|
|||||||
.await
|
.await
|
||||||
.ok_or_else(|| error::ErrorNotFound("file with specified key not found"))?;
|
.ok_or_else(|| error::ErrorNotFound("file with specified key not found"))?;
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().body(SizedStream::new(file_size, file_stream)))
|
Ok(HttpResponse::Ok().body(SizedStream::new(
|
||||||
|
file_size,
|
||||||
|
tokio_util::io::ReaderStream::new(file_stream.into_async_read()),
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[delete("/file/{s3_key}*")]
|
#[delete("/file/{s3_key}*")]
|
||||||
|
Loading…
Reference in New Issue
Block a user