<!-- json
{
  "sourceId": "core-upload-pattern",
  "repositoryId": "travetto",
  "filePath": "module/web-upload/doc/simple-controller.ts",
  "capabilityTags": ["upload", "web", "controller"],
  "operationIds": ["enable-file-upload"],
  "applicability": ["framework-native"],
  "notes": [
    "Reference upload decorator and file input handling patterns."
  ]
}
-->

# core-upload-pattern

- Source: `module/web-upload/doc/simple-controller.ts`
- Capability tags: upload, web, controller
- Applicability: framework-native
- Notes:
  - Reference upload decorator and file input handling patterns.

## Reference Code

```typescript
import { Controller, Get, Post } from '@travetto/web';
import { type FileMap, Upload } from '@travetto/web-upload';

@Controller('/simple')
export class Simple {
  @Get('/age')
  getAge() {
    return { age: 50 };
  }

  @Post('/age')
  getPage() {
    return { age: 20 };
  }

  /**
   * @param file A file to upload
   */
  @Post('/file')
  loadFile(@Upload() upload: File) {
    return upload;
  }

  /**
   * @param uploads A map of files that were uploaded
   */
  @Post('/files')
  async loadFiles(@Upload() uploads: FileMap) {
    for (const [, upload] of Object.entries(uploads)) {
      return upload;
    }
  }
}
```
