Can import photos

This commit is contained in:
2023-08-18 13:41:20 +02:00
parent 9e94cfc298
commit 5fa3d79b4c
8 changed files with 159 additions and 59 deletions

View File

@ -8,7 +8,9 @@ use actix_multipart::form::tempfile::TempFile;
use diesel::prelude::*;
use image::imageops::FilterType;
use image::ImageOutputFormat;
use std::io::{Cursor, Read};
use mime_guess::Mime;
use std::fs::File;
use std::io::{Cursor, Read, Seek, Write};
use uuid::Uuid;
#[derive(thiserror::Error, Debug)]
@ -23,8 +25,38 @@ enum PhotoServiceError {
MimeTypeForbidden(String),
}
pub struct UploadedFile {
pub size: usize,
pub content_type: Option<Mime>,
pub file: File,
}
impl From<TempFile> for UploadedFile {
fn from(value: TempFile) -> Self {
Self {
size: value.size,
content_type: value.content_type,
file: value.file.into_file(),
}
}
}
impl UploadedFile {
pub fn from_memory(buff: &[u8], content_type: Option<Mime>) -> anyhow::Result<Self> {
let mut file = tempfile::tempfile()?;
file.write_all(buff)?;
file.rewind()?;
Ok(Self {
size: buff.len(),
content_type,
file,
})
}
}
/// Finalize upload of a photo
pub async fn finalize_upload(mut file: TempFile) -> anyhow::Result<Photo> {
pub async fn finalize_upload(mut file: UploadedFile) -> anyhow::Result<Photo> {
// Prerequisite checks
if file.size > PHOTOS_MAX_SIZE {
return Err(PhotoServiceError::FileToLarge(file.size).into());