# File Upload

> File upload metadata with name, size, MIME type, and URL.

- Name: `file-upload`
- Categories: common
- Detail page: https://open-types.dev/types/file-upload

## Install

```bash
# Types only
npx shadcn add @open-types/file-upload

# Types + Zod v4 validators
npx shadcn add @open-types/file-upload-zod

# Types + real-world examples
npx shadcn add @open-types/file-upload-examples
```

## Types

```typescript
export interface FileUpload {
  name: string;
  size: number;
  type: string;
  url?: string;
  last_modified?: number;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type { FileUpload } from "../types/file-upload";

export const fileUploadSchema = z.object({
  name: z.string().min(1, { error: "File name is required" }),
  size: z.number().int({ error: "File size must be a whole number" }).min(0, {
    error: "File size cannot be negative",
  }),
  type: z.string().min(1, { error: "File type is required" }),
  url: z.url({ error: "File URL must be a valid URL" }).optional(),
  last_modified: z.number().int({ error: "Last modified must be a whole number" }).optional(),
}) satisfies z.ZodType<FileUpload>;

export type { FileUpload } from "../types/file-upload";
```

## Examples

```typescript
// Source: hand-crafted
import type { FileUpload } from "../types/file-upload";

export const fileUploadExamples = {
  image: {
    name: "avatar.png",
    size: 102_400,
    type: "image/png",
    url: "https://cdn.example.com/uploads/avatar.png",
    last_modified: 1712948400000,
  } satisfies FileUpload,
  pdf: {
    name: "receipt.pdf",
    size: 24_500,
    type: "application/pdf",
    url: "https://cdn.example.com/uploads/receipt.pdf",
  } satisfies FileUpload,
  largeVideo: {
    name: "demo.mp4",
    size: 1_073_741_824,
    type: "video/mp4",
    url: "https://cdn.example.com/uploads/demo.mp4",
    last_modified: 1712948400000,
  } satisfies FileUpload,
  inMemory: {
    name: "notes.txt",
    size: 512,
    type: "text/plain",
  } satisfies FileUpload,
  zeroByte: { name: "empty.log", size: 0, type: "text/plain" } satisfies FileUpload,
} as const;
```
