juhaku / utoipa

Simple, Fast, Code first and Compile time generated OpenAPI documentation for Rust
Apache License 2.0
2.49k stars 197 forks source link

Make implementation for actix MultipartForm #740

Open Geriano opened 1 year ago

Geriano commented 1 year ago
#[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 */
}
i007c commented 8 months ago

👍🏻

izolyomi commented 5 months ago

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?

i007c commented 5 months ago

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 {}
izolyomi commented 5 months ago

Thank you, works like charm. 👍

juhaku commented 1 month ago

I am not sure what kind of information should be possible to extract form the actix-web multipart data. However the multipart thing will change a bit in coming utoipa 5.0.0. Here is PR which adds some examples for the file upload #1113.