Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

FelixHerrmann/swift-multipart-formdata

Repository files navigation

MultipartFormData

Swift SwiftLint

Build multipart/form-data type-safe in Swift. A result builder DSL is also available.

Installation

Add the following to the dependencies of your Package.swift:

.package(url: "https://github.com/FelixHerrmann/swift-multipart-formdata.git", from: "x.x.x")

Xcode

Add the package to your project as shown here.

Manual

Download the files in the Sources folder and drag them into you project.

Example

import MultipartFormData
let boundary = try Boundary(uncheckedBoundary: "example-boundary")
let multipartFormData = try MultipartFormData(boundary: boundary) {
 Subpart {
 ContentDisposition(name: "field1")
 } body: {
 Data("value1".utf8)
 }
 try Subpart {
 ContentDisposition(name: "field2")
 ContentType(mediaType: .applicationJson)
 } body: {
 try JSONSerialization.data(withJSONObject: ["string": "abcd", "int": 1234], options: .prettyPrinted)
 }
 
 let filename = "test.png"
 let homeDirectory = FileManager.default.homeDirectoryForCurrentUser
 let fileDirectory = homeDirectory.appendingPathComponent("Desktop").appendingPathComponent(filename)
 
 if FileManager.default.fileExists(atPath: fileDirectory.path) {
 try Subpart {
 try ContentDisposition(uncheckedName: "field3", uncheckedFilename: filename)
 ContentType(mediaType: .applicationOctetStream)
 } body: {
 try Data(contentsOf: fileDirectory)
 }
 }
}
let url = URL(string: "https://example.com/example")!
let request = URLRequest(url: url, multipartFormData: multipartFormData)
let (data, response) = try await URLSession.shared.data(for: request)
The generated HTTP request
POST https://example.com/example HTTP/1.1
Content-Length: 428
Content-Type: multipart/form-data; boundary="example-boundary"
--example-boundary
Content-Disposition: form-data; name="field1"
value1
--example-boundary
Content-Disposition: form-data; name="field2"
Content-Type: application/json
{
 "string" : "abcd",
 "int" : 1234
}
--example-boundary
Content-Disposition: form-data; name="field3"; filename="test.png"
Content-Type: application/octet-stream
<<png-data>>
--example-boundary--

Documentation

For a detailed usage description, you can check out the documentation.

docs docs

License

MultipartFormData is available under the MIT license. See the LICENSE file for more info.

About

Build multipart/form-data type-safe in Swift.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

Languages

AltStyle によって変換されたページ (->オリジナル) /