在 Swift 中构建类型安全的 multipart/form-data。同时提供了一个结果构建器 DSL。
将以下内容添加到您的 Package.swift
文件的依赖项中
.package(url: "https://github.com/FelixHerrmann/swift-multipart-formdata.git", from: "x.x.x")
按照此处所示,将包添加到您的项目中。
下载 Sources 文件夹中的文件,并将它们拖到您的项目中。
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)
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--
有关详细的使用说明,您可以查看文档。
MultipartFormData 基于 MIT 许可发布。有关更多信息,请参阅 LICENSE 文件。