Skip to content

File Upload Form ​

A form demonstrating single and multiple file uploads with i18n support.

Source: file.yml

What It Does ​

This form shows how to handle file uploads in Espanso Dynamic Forms. It demonstrates:

  • Single file upload (type: object, format: file)
  • Multiple file upload (type: array, format: file)
  • File accept patterns
  • Accessing file properties (text, name, size, hash)
  • i18n translations for file input labels
  • Default file paths using environment variables

Use Case ​

Extract content from files, process multiple files, or include the file contents in your output. Useful for code review, file listings, or any file-based workflow.

Example output:

File contents:
````
# This is the content of date.yml
schema:
  type: object
  ...
````

Multiple files:
````
reply.yml (2205 bytes)
abc123...
````
````
lumetrium.png (15234 bytes)
def456...
````

Form Configuration ​

yml
schema:
  type: object
  required:
    - singleFile
    - multipleFiles
  properties:
    singleFile:
      type: object
      format: file
      i18n: file
    multipleFiles:
      type: array
      format: file
      i18n: file

uischema:
  type: VerticalLayout
  elements:
    - type: Control
      scope: "#/properties/singleFile"
      options:
        accept: "*"
    - type: Control
      scope: "#/properties/multipleFiles"
      options:
        accept: "image/*, .md"

data:
  singleFile:
    path: "{{env.EDF_FORMS}}/date.yml"
  multipleFiles:
    - path: "{{env.EDF_FORMS}}/reply.yml"
    - path: "{{env.EDF_RESOURCES}}/logos/lumetrium.png"
    - path: "{{env.EDF_RESOURCES}}/logos/definer.png"

i18n:
  en:
    file:
      description: Please upload
      selectedFile: Selected file
      selectedFiles: Selected files
      remove: Remove

template: |
  File contents:
  ````
  {{ singleFile.text }}
  ````

  Multiple files:
  {% for f in multipleFiles %}
  ````
  {{ f.name }} ({{ f.size }} bytes)
  {{ f.hash }}
  ````
  {% endfor %}

Key Features ​

Single File Upload ​

Use type: object with format: file:

yml
singleFile:
  type: object
  format: file

Multiple File Upload ​

Use type: array with format: file:

yml
multipleFiles:
  type: array
  format: file

File Accept Patterns ​

Control which files can be selected:

yml
options:
  accept: "*"              # All files
  accept: "image/*"        # All images
  accept: ".md, .txt"      # Specific extensions
  accept: "image/*, .md"   # Combined patterns

File Properties ​

Access these properties for each file:

PropertyDescription
file.textFull text content of the file
file.nameFilename without extension
file.fullNameFilename with extension
file.extensionFile extension (without dot)
file.sizeFile size in bytes
file.hashSHA-256 hash of file contents
file.mimeMIME type
file.pathFull file path
file.base64Binary contents as base64 string
file.dataUrlData URL of the file

Pre-loading Files ​

Set default files using paths:

yml
data:
  singleFile:
    path: "{{env.EDF_FORMS}}/date.yml"

i18n for File Inputs ​

Translate file input labels:

yml
i18n:
  en:
    file:
      description: Please upload
      selectedFile: Selected file
      remove: Remove

Espanso Trigger ​

yml
matches:
  - trigger: ':file'
    replace: '{{output}}'
    force_mode: clipboard
    vars:
      - name: output
        type: script
        params:
          args:
            - C:/Program Files/Espanso Dynamic Forms/EDF.exe
            - --form-config
            - \{\{env.EDF_FORMS}}/file.yml

Customization Ideas ​

  • Accept only specific file types for your workflow
  • Add file size validation
  • Create a code review form that accepts source files
  • Build a file comparison tool with two file inputs
  • Output file contents with syntax highlighting hints