Guess mime type on multi-part when not set

This commit is contained in:
Gregory Schier
2024-07-23 11:39:21 -07:00
parent 0dccba4ab2
commit 51487d5412
3 changed files with 13 additions and 2 deletions

5
src-tauri/Cargo.lock generated
View File

@@ -2929,9 +2929,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]] [[package]]
name = "mime_guess" name = "mime_guess"
version = "2.0.4" version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
dependencies = [ dependencies = [
"mime", "mime",
"unicase", "unicase",
@@ -7347,6 +7347,7 @@ dependencies = [
"hex_color", "hex_color",
"http 1.1.0", "http 1.1.0",
"log", "log",
"mime_guess",
"objc", "objc",
"openssl-sys", "openssl-sys",
"plugin_runtime", "plugin_runtime",

View File

@@ -55,3 +55,4 @@ tokio = { version = "1.36.0", features = ["sync"] }
tokio-stream = "0.1.15" tokio-stream = "0.1.15"
uuid = "1.7.0" uuid = "1.7.0"
thiserror = "1.0.61" thiserror = "1.0.61"
mime_guess = "2.0.5"

View File

@@ -10,6 +10,7 @@ use base64::Engine;
use http::header::{ACCEPT, USER_AGENT}; use http::header::{ACCEPT, USER_AGENT};
use http::{HeaderMap, HeaderName, HeaderValue}; use http::{HeaderMap, HeaderName, HeaderValue};
use log::{error, info, warn}; use log::{error, info, warn};
use mime_guess::Mime;
use reqwest::redirect::Policy; use reqwest::redirect::Policy;
use reqwest::Method; use reqwest::Method;
use reqwest::{multipart, Url}; use reqwest::{multipart, Url};
@@ -318,13 +319,21 @@ pub async fn send_http_request(
.as_str() .as_str()
.unwrap_or_default(); .unwrap_or_default();
// Set or guess mimetype
if !ct_raw.is_empty() { if !ct_raw.is_empty() {
let content_type = render::render(ct_raw, &vars); let content_type = render::render(ct_raw, &vars);
part = part part = part
.mime_str(content_type.as_str()) .mime_str(content_type.as_str())
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
} else if !file_path.is_empty() {
let default_mime = Mime::from_str("application/octet-stream").unwrap();
let mime = mime_guess::from_path(file_path).first_or(default_mime);
part = part
.mime_str(mime.essence_str())
.map_err(|e| e.to_string())?;
} }
// Set fil path if not empty
if !file_path.is_empty() { if !file_path.is_empty() {
let filename = PathBuf::from(file_path) let filename = PathBuf::from(file_path)
.file_name() .file_name()