use std::{fs, io::Write};
use axum::{extract::Multipart, response::IntoResponse, routing::post, Router};
use futures::{StreamExt, TryStreamExt};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, Clone)]
struct FileResp {
#[serde(rename = "dataURL")]
data_url: String,
filename: String,
}
async fn upload(mut multipart: Multipart) -> impl IntoResponse {
let mut file_list = Vec::new();
while let Some(field) = multipart.next_field().await.unwrap() {
let data_url = format!("upload/{}", Uuid::new_v4());
let mut file = fs::File::create(&data_url).unwrap();
let filename = field.name().unwrap().to_string();
let mut stream = field.into_stream();
while let Some(chunk) = stream.next().await {
let data = chunk.unwrap();
file.write_all(&data).unwrap();
}
file_list.push(FileResp { data_url, filename })
}
RespInfo::from(&file_list).to_json()
}
axum = { version = "0.6.1", features = ["headers", "multipart"] }