一个用于创建多部分编码消息体的简单库。
您可以通过在您的 Package.swift
文件中添加正确的描述来使用 The Swift Package Manager。
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/Fyrts/Multipart.git", from: "0.1"),
]
)
然后运行 swift build
。
要在您的项目中使用此库,请将 Multipart.xcodeproj 拖入您的工作区。
import Multipart
var message = Multipart(type: .alternative)
message.append(Part(body: "Lorem ipsum dolor sit amet.", contentType: "text/plain"))
message.append(Part(body: "<p><b>Lorem ipsum</b> dolor sit <i>amet</i>.</p>", contentType: "text/html"))
print(message)
import Multipart
// Construct a multipart/alternative message
var plainTextPart = Part(body: "Lorem ipsum dolor sit amet.".data(using: .ascii)!)
plainTextPart.setValue("text/plain", forHeaderField: "Content-Type")
plainTextPart.setAttribute(attribute: "charset", value: "us-ascii", forHeaderField: "Content-Type")
var htmlPart = Part(body: "<p><b>Lorem ipsum</b> dolor sit <i>amet</i>.</p>")
htmlPart.setValue("text/html", forHeaderField: "Content-Type")
htmlPart.setAttribute(attribute: "charset", value: "utf-8", forHeaderField: "Content-Type")
let textParts = Multipart(type: .alternative, parts: [plainTextPart, htmlPart])
// Add a file by wrapping it in a multipart/mixed message
var filePart = Part(body: "Ut enim ad minim veniam, quis nostrud exercitation ullamco.")
filePart.setValue("text/plain", forHeaderField: "Content-Type")
filePart.setAttribute(attribute: "charset", value: "utf-8", forHeaderField: "Content-Type")
filePart.setValue("attachment", forHeaderField: "Content-Disposition")
filePart.setAttribute(attribute: "filename", value: "attachment.txt", forHeaderField: "Content-Disposition")
var mixedMessage = Multipart(type: .mixed, parts: [textParts, filePart])
mixedMessage.preamble = "This is a multi-part message in MIME format."
print(mixedMessage)
Part.FormData
是一个用于快速构建 multipart/form-data
消息的辅助函数,而 URLRequest.setMultipartBody
提供了通过 HTTP 发送数据的简单方法。
import Multipart
var message = Multipart(type: .formData)
message.append(Part.FormData(name: "firstname", value: "Johnny"))
message.append(Part.FormData(name: "lastname", value: "Appleseed"))
var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
request.setMultipartBody(message)
URLSession.shared.dataTask(with: request) { data, response, error in
print(data, response, error)
}.resume()
Part.FormData
也提供了基本的文件上传功能。
import Multipart
let fileContents = try! Data(contentsOf: URL(string: "/Users/user/Desktop/document.pdf")!)
var message = Multipart(type: .formData)
message.append(Part.FormData(name: "message", value: "See attached file."))
message.append(Part.FormData(name: "file", fileData: fileContents, fileName: "document.pdf", contentType: "application/pdf"))
var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
request.setMultipartBody(message)
URLSession.shared.dataTask(with: request) { data, response, error in
print(data, response, error)
}.resume()
如果 URLRequest.setMultipartBody
不符合您的需求,您可以使用 Multipart.headers
和 Multipart.body
来自己构建请求。
import Multipart
var message = Multipart(type: .formData)
message.append(Part.FormData(name: "firstname", value: "Johnny"))
message.append(Part.FormData(name: "lastname", value: "Appleseed"))
var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
for header in message.headers {
request.setValue(header.valueWithAttributes, forHTTPHeaderField: header.name)
}
request.httpBody = message.body