PhoenixKit.Storage.File (phoenix_kit v1.5.1)
View SourceSchema for original file uploads.
Represents the original uploaded file with metadata. Each file can have multiple instances (variants) like thumbnails, resizes, or video quality variants.
File Types
- image - JPEG, PNG, WebP, GIF, HEIC (scalable)
- video - MP4, WebM, MOV, AVI, MKV (scalable)
- document - PDF, DOC, DOCX, TXT, MD (non-scalable)
- archive - ZIP, RAR, 7Z, TAR, GZ (non-scalable)
Status Flow
processing- File is being processed (variants being generated)active- File is ready and availablefailed- Processing failed
Fields
original_file_name- User's original filenamefile_name- System filename (uuid_v7-original.ext)mime_type- MIME type (image/jpeg, video/mp4, etc.)file_type- High-level type (image, video, document, archive)ext- File extension (jpg, mp4, pdf, etc.)checksum- MD5 or SHA256 hash for integrity verificationsize- File size in byteswidth- Image/video width in pixels (nullable)height- Image/video height in pixels (nullable)duration- Video duration in seconds (nullable)status- Processing statusmetadata- JSONB with EXIF, codec info, etc.user_id- Owner of the file
Examples
# Image file
%File{
id: "018e3c4a-9f6b-7890-abcd-ef1234567890",
original_file_name: "profile.jpg",
file_name: "018e3c4a-9f6b-7890-original.jpg",
mime_type: "image/jpeg",
file_type: "image",
ext: "jpg",
checksum: "abc123def456...",
size: 524_288, # 512 KB
width: 2000,
height: 2000,
status: "active",
metadata: %{"camera" => "Canon EOS"},
user_id: "..."
}
# Video file
%File{
original_file_name: "intro.mp4",
file_name: "018e3c4a-9f6b-7890-original.mp4",
mime_type: "video/mp4",
file_type: "video",
ext: "mp4",
size: 10_485_760, # 10 MB
width: 1920,
height: 1080,
duration: 30, # 30 seconds
status: "processing",
metadata: %{"codec" => "h264"}
}
# Document file
%File{
original_file_name: "report.pdf",
file_name: "018e3c4a-9f6b-7890-original.pdf",
mime_type: "application/pdf",
file_type: "document",
ext: "pdf",
size: 2_097_152, # 2 MB
status: "active"
}
Summary
Functions
Returns whether this file is an archive.
Changeset for creating or updating a file.
Returns whether this file is a document.
Returns whether this file is an image.
Returns whether this file type supports variant generation (scalable).
Returns whether this file is a video.
Types
@type t() :: %PhoenixKit.Storage.File{ __meta__: term(), checksum: String.t(), duration: integer() | nil, ext: String.t(), file_name: String.t(), file_path: String.t() | nil, file_type: String.t(), height: integer() | nil, id: UUIDv7.t() | nil, inserted_at: NaiveDateTime.t() | nil, instances: [PhoenixKit.Storage.FileInstance.t()] | Ecto.Association.NotLoaded.t(), metadata: map() | nil, mime_type: String.t(), original_file_name: String.t(), size: integer(), status: String.t(), updated_at: NaiveDateTime.t() | nil, user: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t(), user_id: integer() | nil, width: integer() | nil }
Functions
Returns whether this file is an archive.
Changeset for creating or updating a file.
Required Fields
original_file_namefile_namemime_typefile_type(must be: "image", "video", "document", "archive")extchecksumsizeuser_id
Validation Rules
- File type must be valid
- Status must be valid (processing, active, failed)
- Size must be positive
- Width/height must be positive (if provided)
- Duration must be positive (if provided)
Returns whether this file is a document.
Returns whether this file is an image.
Returns whether this file type supports variant generation (scalable).
Returns whether this file is a video.