mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-25 04:51:27 +00:00
Properly handle Content-Type
This commit is contained in:
parent
20fa2cacf4
commit
24d3b289da
3 changed files with 29 additions and 21 deletions
|
@ -294,6 +294,8 @@ impl Media {
|
||||||
|
|
||||||
#[cfg(feature = "s3")]
|
#[cfg(feature = "s3")]
|
||||||
{
|
{
|
||||||
|
use rocket::http::ContentType;
|
||||||
|
|
||||||
let dest = determine_mirror_s3_path(&remote_url);
|
let dest = determine_mirror_s3_path(&remote_url);
|
||||||
|
|
||||||
let media = request::get(
|
let media = request::get(
|
||||||
|
@ -301,18 +303,22 @@ impl Media {
|
||||||
User::get_sender(),
|
User::get_sender(),
|
||||||
CONFIG.proxy().cloned(),
|
CONFIG.proxy().cloned(),
|
||||||
)?;
|
)?;
|
||||||
let content_type = media.headers().get(reqwest::header::CONTENT_TYPE).cloned();
|
|
||||||
|
let content_type = media
|
||||||
|
.headers()
|
||||||
|
.get(reqwest::header::CONTENT_TYPE)
|
||||||
|
.and_then(|x| x.to_str().ok())
|
||||||
|
.and_then(ContentType::parse_flexible)
|
||||||
|
.unwrap_or(ContentType::Binary);
|
||||||
|
|
||||||
let bytes = media.bytes()?;
|
let bytes = media.bytes()?;
|
||||||
|
|
||||||
let bucket = CONFIG.s3.as_ref().unwrap().get_bucket();
|
let bucket = CONFIG.s3.as_ref().unwrap().get_bucket();
|
||||||
match content_type.as_ref().and_then(|x| x.to_str().ok()) {
|
bucket.put_object_with_content_type_blocking(
|
||||||
Some(ct) => {
|
&dest,
|
||||||
bucket.put_object_with_content_type_blocking(&dest, &bytes, ct)?;
|
&bytes,
|
||||||
}
|
&content_type.to_string()
|
||||||
None => {
|
)?;
|
||||||
bucket.put_object_blocking(&dest, &bytes)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dest
|
dest
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,14 +131,14 @@ fn save_uploaded_file(file: &SavedField) -> Result<Option<String>, plume_models:
|
||||||
};
|
};
|
||||||
|
|
||||||
let bucket = CONFIG.s3.as_ref().unwrap().get_bucket();
|
let bucket = CONFIG.s3.as_ref().unwrap().get_bucket();
|
||||||
match &file.headers.content_type {
|
let content_type = match &file.headers.content_type {
|
||||||
Some(ct) => {
|
Some(ct) => ct.to_string(),
|
||||||
bucket.put_object_with_content_type_blocking(&dest, &bytes, &ct.to_string())?;
|
None => ContentType::from_extension(&ext)
|
||||||
}
|
.unwrap_or(ContentType::Binary)
|
||||||
None => {
|
.to_string(),
|
||||||
bucket.put_object_blocking(&dest, &bytes)?;
|
};
|
||||||
}
|
|
||||||
}
|
bucket.put_object_with_content_type_blocking(&dest, &bytes, &content_type)?;
|
||||||
|
|
||||||
Ok(Some(dest))
|
Ok(Some(dest))
|
||||||
}
|
}
|
||||||
|
|
|
@ -269,13 +269,15 @@ pub fn plume_media_files(file: PathBuf) -> Option<CachedFile> {
|
||||||
|
|
||||||
#[cfg(feature="s3")]
|
#[cfg(feature="s3")]
|
||||||
{
|
{
|
||||||
let ct = file.extension()
|
|
||||||
.and_then(|ext| ContentType::from_extension(&ext.to_string_lossy()))
|
|
||||||
.unwrap_or(ContentType::Binary);
|
|
||||||
|
|
||||||
let data = CONFIG.s3.as_ref().unwrap().get_bucket()
|
let data = CONFIG.s3.as_ref().unwrap().get_bucket()
|
||||||
.get_object_blocking(format!("static/media/{}", file.to_string_lossy())).ok()?;
|
.get_object_blocking(format!("static/media/{}", file.to_string_lossy())).ok()?;
|
||||||
|
|
||||||
|
let ct = data.headers().get("content-type")
|
||||||
|
.and_then(|x| ContentType::parse_flexible(&x))
|
||||||
|
.or_else(|| file.extension()
|
||||||
|
.and_then(|ext| ContentType::from_extension(&ext.to_string_lossy())))
|
||||||
|
.unwrap_or(ContentType::Binary);
|
||||||
|
|
||||||
Some(CachedFile {
|
Some(CachedFile {
|
||||||
inner: FileKind::S3 ( data.to_vec(), ct),
|
inner: FileKind::S3 ( data.to_vec(), ct),
|
||||||
cache_control: CacheControl(vec![CacheDirective::MaxAge(60 * 60 * 24 * 30)]),
|
cache_control: CacheControl(vec![CacheDirective::MaxAge(60 * 60 * 24 * 30)]),
|
||||||
|
|
Loading…
Reference in a new issue