Skip to content

Commit d79c991

Browse files
committed
changes: correct resolve mime type
1 parent 2a761d7 commit d79c991

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

document_manager/src/operations/fs.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use base64::engine::{GeneralPurpose, GeneralPurposeConfig};
99
use color_eyre::{Report, Result};
1010
use color_eyre::eyre::ContextCompat;
1111
use log::debug;
12+
use mime_guess::{from_ext, Mime};
1213
use tokio::fs::{File, remove_file};
1314
use tokio::io::AsyncWriteExt;
1415
use uuid::Uuid;
@@ -138,6 +139,13 @@ pub fn get_extension_and_file_name(file_name: &str) -> (&str, Option<&str>) {
138139
}
139140
}
140141

142+
pub fn get_content_type_by_extension(ex: &str) -> String {
143+
let extension_format_mime_type = match ex.rfind(".") {
144+
None => ex,
145+
Some(index) => &ex[index + 1..]
146+
};
147+
from_ext(extension_format_mime_type).first_or_octet_stream().to_string()
148+
}
141149

142150
pub fn get_file_name_in_url(url: &str) -> Option<&str> {
143151
if let Some(index) = url.rfind('/') {

document_manager/src/operations/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use diesel_async::{AsyncConnection, RunQueryDsl};
1212
use diesel_async::scoped_futures::ScopedFutureExt;
1313
use itertools::Itertools;
1414
use log::{debug, error, info};
15-
use mime_guess::from_ext;
15+
use mime_guess::{from_ext, Mime};
1616
use reqwest::Client;
1717
use serde::{Deserialize, Serialize};
1818
use uuid::Uuid;
@@ -23,7 +23,7 @@ use crate::endpoints::filter::DocumentFilterRequest;
2323
use crate::endpoints::save::{SaveDocumentByUrlRequest, SaveDocumentRequest};
2424
use crate::EnvironmentState;
2525
use crate::models::{Content, DeleteContent, DeleteDocument, Document, NewContent, NewDocument};
26-
use crate::operations::fs::{delete_file, generate_path_by_uuid, generate_url_by_uuid, get_extension_and_file_name, get_file_name_in_url, move_file, read_content_bytes_to_base64, read_content_file_to_base64, save_file};
26+
use crate::operations::fs::{delete_file, generate_path_by_uuid, generate_url_by_uuid, get_content_type_by_extension, get_extension_and_file_name, get_file_name_in_url, move_file, read_content_bytes_to_base64, read_content_file_to_base64, save_file};
2727
use crate::schema::{content, document};
2828

2929
mod fs;
@@ -100,12 +100,12 @@ pub async fn save_document_by_url(params: SaveDocumentByUrlRequest,
100100
let r = conn.transaction::<Uuid, Report, _>(|conn| {
101101
async move {
102102
let url_file = params.url_file.clone();
103+
103104
let file_name_in_url = get_file_name_in_url(&url_file)
104105
.ok_or_eyre(format!("Error not match filename in url: {:?} ", url_file))?;
105106
let (filename, extension) = get_extension_and_file_name(file_name_in_url);
106107

107-
let mime_type = extension
108-
.map(|x| from_ext(x).first_or_octet_stream().to_string());
108+
let mime_type = extension.map(get_content_type_by_extension);
109109
let info_download = download_file(&params.url_file).await?;
110110
let new_document = NewDocument {
111111
id_document: &uuid_document,

0 commit comments

Comments
 (0)