Can import photos
This commit is contained in:
@ -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());
|
||||
|
Reference in New Issue
Block a user