1extern crate regex;
2extern crate data_encoding;
3
4use std::fs::File;
5use regex::Regex;
6use std::io::Read;
7use std::string::String;
8use data_encoding::BASE64_MIME;
9
10pub fn get_file_type(hex: &str) -> &str {
11 if Regex::new(r"^ffd8ffe0").unwrap().is_match(hex) {
12 return "jpeg"
13 } else if Regex::new(r"^89504e47").unwrap().is_match(hex) {
14 return "png"
15 } else if Regex::new(r"^47494638").unwrap().is_match(hex) {
16 return "gif"
17 } else if Regex::new(r"^00000100").unwrap().is_match(hex) {
18 return "x-icon"
19 }
20 panic!("invalid file type")
21}
22
23pub fn vec_to_base64_http(vec: Vec<u8>, data_type: &str) -> String {
24 let base64 = BASE64_MIME.encode(&*vec);
25 return format!("data:{};base64,{}", data_type, base64.replace("\r\n", ""));
26}
27
28pub fn vec_to_base64(vec: Vec<u8>) -> String {
29 let base64 = BASE64_MIME.encode(&*vec);
30 let hex = hex::encode(vec);
31 return format!("data:image/{};base64,{}", get_file_type(&hex), base64.replace("\r\n", ""));
32}
33
34pub fn to_base64(path: &str) -> String {
35 let mut file = File::open(path).unwrap();
36 let mut vec = Vec::new();
37 let _ = file.read_to_end(&mut vec);
38 return vec_to_base64(vec);
39}
40
41pub fn from_base64(base64: String) -> Vec<u8> {
42 let offset = base64.find(',').unwrap_or(base64.len())+1;
43 let mut value = base64;
44 value.drain(..offset);
45 return BASE64_MIME.decode(value.as_ref()).unwrap();
46}