HxEncoding
HxEncoding represents the hx-encoding attribute, controlling how form data is encoded when sent in an HTMX request. The primary use case is file uploads, which require multipart/form-data encoding instead of the default URL-encoded form submission.
Use HxEncoding.Multipart to enable multipart form data encoding for requests that include file fields. Here is the core pattern:
import zio.http.htmx._
// Multipart encoding (for file uploads)
HxEncoding.Multipart
Encoding Strategies​
HxEncoding.Multipart sets the hx-encoding attribute to multipart/form-data, enabling file uploads and other multipart data:
import zio.blocks.html._
import zio.http.htmx._
form(
hxPost := "/upload",
hxEncoding := HxEncoding.Multipart,
input(name := "file", `type` := "file"),
input(name := "description"),
button("Upload")
)
When you omit hxEncoding, HTMX uses the default encoding (URL-encoded form data), so there is no DSL value for the default case. This keeps the DSL focused on the special cases that deviate from the default.
Common Patterns​
Multipart encoding enables file uploads in HTMX forms. Here are practical usage patterns:
File Upload with Metadata​
Send a file along with additional form fields:
import zio.blocks.html._
import zio.http.htmx._
form(
hxPost := "/api/upload-document",
hxEncoding := HxEncoding.Multipart,
hxTarget := HxTarget.css("#upload-status"),
hxSwap := HxSwap.InnerHTML,
fieldset(
legend("Upload Document"),
input(
name := "file",
`type` := "file",
accept := ".pdf,.doc,.docx"
),
input(
name := "title",
placeholder := "Document Title"
),
textarea(name := "description", "Description"),
button("Upload")
)
)
Profile Picture Upload​
Update a profile picture with multipart encoding:
import zio.blocks.html._
import zio.http.htmx._
form(
hxPost := "/api/profile-picture",
hxEncoding := HxEncoding.Multipart,
hxTarget := HxTarget.css("#profile-pic"),
hxSwap := HxSwap.OuterHTML,
input(
name := "image",
`type` := "file",
accept := "image/*"
),
button("Update Picture")
)
Integration with Other Request Control Attributes​
HxEncoding works alongside HxParams to control both how data is encoded and which fields are sent:
import zio.blocks.html._
import zio.http.htmx._
form(
hxPost := "/upload",
hxEncoding := HxEncoding.Multipart,
hxParams := HxParams.only("file", "title"), // only send these fields
input(name := "file", `type` := "file"),
input(name := "title"),
input(name := "csrf_token"), // excluded by hxParams
button("Upload")
)
The ToHtmxValue[HxEncoding] instance renders automatically, so HxEncoding values work seamlessly with the hxEncoding attribute key.