title in multipart media upload APIs

This commit is contained in:
Brandon Thomas committed 2024-04-01 02:21:02 -04:00
1 parent 527d980d16
commit d0a1e0192a
10 files changed
+63 -1

No files matched your search

@@ -44,6 +44,8 @@ pub struct InsertMediaFileFromUploadArgs<'a> {
// TODO: Media duration.
//pub duration_millis: u64,
pub maybe_title: Option<&'a str>,
pub public_bucket_directory_hash: &'a str,
pub maybe_public_bucket_prefix: Option<&'a str>,
pub maybe_public_bucket_extension: Option<&'a str>,
@@ -109,6 +111,8 @@ SET
checksum_sha2 = ?,
maybe_title = ?,
public_bucket_directory_hash = ?,
maybe_public_bucket_prefix = ?,
maybe_public_bucket_extension = ?,
@@ -136,6 +140,8 @@ SET
args.sha256_checksum,
args.maybe_title,
args.public_bucket_directory_hash,
args.maybe_public_bucket_prefix,
args.maybe_public_bucket_extension,
@@ -206,6 +206,7 @@ pub async fn create_scene_handler(
file_size_bytes: file_size_bytes as u64,
duration_millis: 0, // None
sha256_checksum: &hash,
maybe_title: upload_media_request.title.as_deref(),
public_bucket_directory_hash: public_upload_path.get_object_hash(),
maybe_public_bucket_prefix: PREFIX,
maybe_public_bucket_extension: SUFFIX,
@@ -9,9 +9,15 @@ use tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken;
use crate::http_server::web_utils::read_multipart_field_bytes::{checked_read_multipart_bytes, read_multipart_field_as_text};
pub struct MediaFileUploadData {
// Required
pub uuid_idempotency_token: Option<String>,
pub file_name: Option<String>,
pub file_bytes: Option<BytesMut>,
// Optional: name of the file in the File() object
pub file_name: Option<String>,
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
}
/// Pull common parts out of multipart media HTTP requests, typically for handling file uploads.
@@ -19,6 +25,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut uuid_idempotency_token = None;
let mut file_bytes = None;
let mut file_name = None;
let mut title = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -47,6 +54,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("title") => {
title = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -55,5 +69,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
uuid_idempotency_token,
file_name,
file_bytes,
title,
})
}
@@ -336,6 +336,7 @@ pub async fn process_upload_media_file(
file_size_bytes: file_size_bytes as u64,
duration_millis: 0, // TODO
sha256_checksum: &hash,
maybe_title: upload_media_request.title.as_deref(),
public_bucket_directory_hash: public_upload_path.get_object_hash(),
maybe_public_bucket_prefix: PREFIX,
maybe_public_bucket_extension: extension.as_deref(),
@@ -17,6 +17,9 @@ pub struct MediaFileUploadData {
pub file_bytes: Option<BytesMut>,
pub media_file_subtype: Option<MediaFileSubtype>,
pub media_file_class: Option<MediaFileClass>,
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
}
/// Pull common parts out of multipart media HTTP requests, typically for handling file uploads.
@@ -26,6 +29,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut file_name = None;
let mut media_file_class = None;
let mut media_file_subtype = None;
let mut title = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -80,6 +84,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
anyhow!("Wrong MediaFileClass: {:?}", &err)
})?;
},
Some("title") => {
title = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -90,5 +101,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_bytes,
media_file_class,
media_file_subtype,
title,
})
}
@@ -205,6 +205,7 @@ pub async fn upload_engine_asset_media_file_handler(
file_size_bytes: file_size_bytes as u64,
duration_millis: 0,
sha256_checksum: &hash,
maybe_title: upload_media_request.title.as_deref(),
public_bucket_directory_hash: public_upload_path.get_object_hash(),
maybe_public_bucket_prefix: PREFIX,
maybe_public_bucket_extension: Some(suffix),
@@ -13,6 +13,9 @@ pub struct MediaFileUploadData {
pub file_name: Option<String>,
pub file_bytes: Option<BytesMut>,
pub media_source: MediaFileUploadSource,
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
}
/// Where the frontend tells us the file came from.
@@ -31,6 +34,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut file_bytes = None;
let mut file_name = None;
let mut media_source = None;
let mut title = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -66,6 +70,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("title") => {
title = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -87,5 +98,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_name,
file_bytes,
media_source,
title,
})
}
@@ -336,6 +336,7 @@ pub async fn process_upload_media_file(
file_size_bytes: file_size_bytes as u64,
duration_millis: 0, // TODO
sha256_checksum: &hash,
maybe_title: upload_media_request.title.as_deref(),
public_bucket_directory_hash: public_upload_path.get_object_hash(),
maybe_public_bucket_prefix: PREFIX,
maybe_public_bucket_extension: extension.as_deref(),
@@ -13,6 +13,9 @@ pub struct MediaFileUploadData {
pub file_name: Option<String>,
pub file_bytes: Option<BytesMut>,
pub media_source: MediaFileUploadSource,
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
}
/// Where the frontend tells us the file came from.
@@ -31,6 +34,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut file_bytes = None;
let mut file_name = None;
let mut media_source = None;
let mut title = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -66,6 +70,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("title") => {
title = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -87,5 +98,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_name,
file_bytes,
media_source,
title,
})
}
@@ -219,6 +219,7 @@ pub async fn upload_video_media_file_handler(
file_size_bytes: file_size_bytes as u64,
duration_millis: mp4_info.duration_millis as u64,
sha256_checksum: &hash,
maybe_title: upload_media_request.title.as_deref(),
public_bucket_directory_hash: public_upload_path.get_object_hash(),
maybe_public_bucket_prefix: PREFIX,
maybe_public_bucket_extension: Some(&extension),