utoipa icon indicating copy to clipboard operation
utoipa copied to clipboard

Make implementation for actix MultipartForm

Open Geriano opened this issue 1 year ago • 5 comments

#[utoipa::path(
  tag = "Master Storage",
  context_path = "/api/v1/storage",
)]
#[post("/")]
pub async fn store(
  pool: Data<DbPool>,
  form: MultipartForm<Upload>,
  socket: Data<WebsocketServer>,
) -> Result<impl Responder, Error> {
  /* some code */
}

Geriano avatar Aug 17 '23 11:08 Geriano

👍🏻

i007c avatar Mar 11 '24 10:03 i007c

I haven't seen any updates related to this issue yet. I guess it's not planned to be implemented, is it?

As far as I see, multipart forms with file uploads are supported by OpenApi. Is there any other "manual" way to define a proper schema for similar endpoints with Utoipa?

izolyomi avatar Jun 12 '24 13:06 izolyomi

this works fine:

use actix_multipart::form::MultipartForm;
use actix_multipart::form::{tempfile::TempFile, MultipartForm};
use utoipa::ToSchema;

#[derive(Debug, MultipartForm, ToSchema)]
pub struct UpdatePhoto {
    #[schema(value_type = String, format = Binary)]
    #[multipart(limit = "8 MiB")]
    pub photo: TempFile,
}

#[utoipa::path(
    put,
    request_body(content = UpdatePhoto, content_type = "multipart/form-data"),
    responses((status = 200))
)]
#[put("/upload/")]
async fn upload(form: MultipartForm<UpdatePhoto>) -> HttpResponse {}

i007c avatar Jun 12 '24 14:06 i007c

Thank you, works like charm. 👍

izolyomi avatar Jun 12 '24 16:06 izolyomi