Skip to content
Download

Adaptador FormData

Use o decorator de parâmetro @FormData() para extrair payloads multipart em um objeto tipado. Ele funciona em parâmetros de handlers dentro de controllers.

Importação

ts
import { FormData, type FormDataPayload } from "@bunstone";

Uso

ts
class UploadController {
  @Post("/upload")
  upload(
    @FormData({
      fileField: "files", // opcional: campo específico de onde ler arquivos
      allowedTypes: ["image/avif"], // opcional: mimes ou extensões permitidas
      jsonField: "meta", // opcional: faz o parse deste campo como JSON
    })
    payload: FormDataPayload
  ) {
    // payload.files: File[]
    // payload.json: JSON parseado de jsonField, se fornecido
  }
}

Opções

  • fileField (string): Lê arquivos apenas deste campo. O padrão é ler todos os valores de arquivo do formulário.
  • allowedTypes (string[]): Tipos MIME ou extensões permitidos. Rejeita os demais com bad request.
  • jsonField (string): Nome do campo a ser parseado como JSON. Rejeita valor não string ou JSON inválido.

Formato do payload

ts
type FormDataPayload = {
  files: File[];
  json?: unknown;
};

Exemplo prático

Explore o tratamento de form-data com múltiplos campos:

ts
import {
  Module,
  Controller,
  Post,
  Get,
  AppStartup,
  CacheAdapter,
  FormData,
} from "../../index";

@Controller("cache")
class CacheController {
  constructor(private readonly cache: CacheAdapter) {}

  @Get(":key")
  async getCache(key: string) {
    const value = await this.cache.get(key);
    return { key, value };
  }

  @Post(":key")
  async setCache(key: string, @Body() body: any) {
    await this.cache.set(key, body, { ttlSeconds: 60 });
    return { success: true };
  }
}

@Controller("upload")
class UploadController {
  @Post()
  async uploadFile(@FormData() formData: any) {
    // Access form fields and files
    const { fields, files } = formData;
    return {
      receivedFields: Object.keys(fields),
      receivedFiles: Object.keys(files),
    };
  }
}

@Module({
  controllers: [CacheController, UploadController],
  providers: [CacheAdapter],
})
class AppModule {}

const app = await AppStartup.create(AppModule);
console.log("Adapters example configured.");

Veja no GitHub

Distribuído sob a Licença MIT.