From 51487d54121af99f6a259f2b76f5baf7126eb63b Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Tue, 23 Jul 2024 11:39:21 -0700 Subject: [PATCH] Guess mime type on multi-part when not set --- src-tauri/Cargo.lock | 5 +++-- src-tauri/Cargo.toml | 1 + src-tauri/src/http_request.rs | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 83269e8d..1ef3a3f1 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2929,9 +2929,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -7347,6 +7347,7 @@ dependencies = [ "hex_color", "http 1.1.0", "log", + "mime_guess", "objc", "openssl-sys", "plugin_runtime", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 69d0914c..73417047 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -55,3 +55,4 @@ tokio = { version = "1.36.0", features = ["sync"] } tokio-stream = "0.1.15" uuid = "1.7.0" thiserror = "1.0.61" +mime_guess = "2.0.5" diff --git a/src-tauri/src/http_request.rs b/src-tauri/src/http_request.rs index 928598bc..08cb775d 100644 --- a/src-tauri/src/http_request.rs +++ b/src-tauri/src/http_request.rs @@ -10,6 +10,7 @@ use base64::Engine; use http::header::{ACCEPT, USER_AGENT}; use http::{HeaderMap, HeaderName, HeaderValue}; use log::{error, info, warn}; +use mime_guess::Mime; use reqwest::redirect::Policy; use reqwest::Method; use reqwest::{multipart, Url}; @@ -318,13 +319,21 @@ pub async fn send_http_request( .as_str() .unwrap_or_default(); + // Set or guess mimetype if !ct_raw.is_empty() { let content_type = render::render(ct_raw, &vars); part = part .mime_str(content_type.as_str()) .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() { let filename = PathBuf::from(file_path) .file_name()