Skip to content

Instantly share code, notes, and snippets.

@nathanborror
Created June 30, 2015 23:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nathanborror/79b497391cd79dc92a5a to your computer and use it in GitHub Desktop.
Save nathanborror/79b497391cd79dc92a5a to your computer and use it in GitHub Desktop.
multipart/form-data
enum HTTPRouter: URLRequestConvertible {
static let baseURL = "http://YOUR_HOST_URL"
case Upload(field: String, filename: String, mimeType: String, data: NSData)
var method: Alamofire.Method {
switch self {
case Upload:
return .POST
}
}
var path: String {
switch self {
case Upload:
return "/upload"
}
}
var URLRequest: NSURLRequest {
let URL: NSURL = NSURL(string: HTTPRouter.baseURL)!
let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
mutableURLRequest.HTTPMethod = method.rawValue
switch self {
case .Upload(let field, let filename, let mimeType, let data):
let boundary = "BOUNDARY"
let divider = "\r\n--\(boundary)\r\n"
let contentDisposition = "Content-Disposition: form-data; name=\"\(field)\"; filename=\"\(filename)\"\r\n"
let contentType = "Content-Type: \(mimeType)\r\n\r\n"
let body:NSMutableData = NSMutableData()
body.appendData(divider.dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(contentDisposition.dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(contentType.dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(data)
body.appendData(divider.dataUsingEncoding(NSUTF8StringEncoding)!)
mutableURLRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
mutableURLRequest.HTTPBody = body
return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0
}
}
}
// Usage
guard let data = NSData(contentsOfURL: URL_TO_YOUR_DATA) else { return }
Alamofire.request(HTTPRouter.Upload(field: "file", filename: "picture.png", mimeType: "application/octet-stream", data: data))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment