Skip to main content

vertigo_forms/
image_upload.rs

1use base64::{Engine as _, engine::general_purpose::STANDARD_NO_PAD as BASE_64};
2use vertigo::DropFileItem;
3
4use crate::name_to_mime;
5
6#[derive(Clone, Debug, PartialEq, vertigo::AutoJsJson)]
7pub struct ImageUpload {
8    pub name: String,
9    pub mime: Option<String>,
10    pub data: String, // base64
11}
12
13impl ImageUpload {
14    pub fn to_vec(&self) -> Result<Vec<u8>, base64::DecodeError> {
15        BASE_64.decode(&self.data)
16    }
17}
18
19impl From<DropFileItem> for ImageUpload {
20    fn from(item: DropFileItem) -> Self {
21        let mime_str = name_to_mime(&item.name);
22        let mime = if mime_str == "application/octet-stream" {
23            None
24        } else {
25            Some(mime_str.to_string())
26        };
27        Self {
28            name: item.name.clone(),
29            mime,
30            data: BASE_64.encode(&*item.data),
31        }
32    }
33}