This commit is contained in:
2025-10-09 22:41:04 +02:00
parent 768f8cb21c
commit 4a428b9af6
13 changed files with 1019 additions and 50 deletions
+11 -28
View File
@@ -1,8 +1,6 @@
use std::collections::HashMap;
use std::time::Duration;
use aws_sdk_s3::presigning::PresigningConfig;
use aws_sdk_s3::primitives::ByteStream;
use axum::extract::{Json, Multipart, Path, Query, State};
use axum::http::StatusCode;
use axum::response::IntoResponse;
@@ -267,21 +265,11 @@ pub async fn upload_document(
}
}
let mut put_request = state
.s3
.put_object()
.bucket(&state.config.s3_bucket)
.key(&s3_key)
.body(ByteStream::from(file_bytes.clone()));
if let Some(ref ct) = content_type {
put_request = put_request.content_type(ct.clone());
}
put_request
.send()
state
.storage
.put_object(&s3_key, file_bytes.clone(), content_type.clone())
.await
.map_err(|err| AppError::internal(format!("failed to upload to s3: {err}")))?;
.map_err(|err| AppError::internal(format!("failed to store document: {err}")))?;
let metadata_value = if metadata.is_null() {
Value::Object(Default::default())
@@ -349,22 +337,17 @@ pub async fn download_document(
.filter(document_versions::version_number.eq(doc.current_version))
.first(&mut conn)?;
let presign_config = PresigningConfig::builder()
.expires_in(Duration::from_secs(PRESIGNED_URL_EXPIRY_SECONDS))
.build()
.map_err(|err| AppError::internal(format!("failed to build presigning config: {err}")))?;
let presigned = state
.s3
.get_object()
.bucket(&state.config.s3_bucket)
.key(&version.s3_key)
.presigned(presign_config)
let presigned_url = state
.storage
.presign_get_object(
&version.s3_key,
Duration::from_secs(PRESIGNED_URL_EXPIRY_SECONDS),
)
.await
.map_err(|err| AppError::internal(format!("failed to generate download URL: {err}")))?;
Ok(Json(DocumentDownloadResponse {
url: presigned.uri().to_string(),
url: presigned_url,
expires_in: PRESIGNED_URL_EXPIRY_SECONDS,
filename: doc.original_name.clone(),
content_type: doc.content_type.clone(),