Alamofire 4 Multipart Form Data Video Upload
By Francis Fuerte and Chris Ching
![](https://codewithchris-wpengine.netdna-ssl.com/wp-content/uploads/2019/11/alamofire-tutorial.png)
If y'all accept been diving deep into iOS evolution yous may have already see accessing data/databases using URLSession , this is fine and all only sometimes it gets annoying to use, this is where Alamofire comes in. And then what is Alamofire?
What is Alamofire?
Alamofire is an elegant and composable way to interface to HTTP network requests. Information technology builds on top of Apple's URL Loading Organization provided by the Foundation framework. At the core of the organization is URLSession and the URLSessionTask subclasses. Alamo burn down wraps these APIs, and many others, in an easier to use interface and provides a variety of functionality necessary for modern awarding development using HTTP networking.
Part ane: Installation
You demand to have cocoapods installed for this, one time that is ready, allow'due south create our xcode project. For this example we accept created an xcode project chosen AlamofireTest.
Nosotros'll exist using Cocoapods to install the Alamofire library. If need to set Cocoapods on your system first, bank check out my Cocoapods tutorial.
Now navigate to your project binder and open a concluding window, besides navigate the final window to the project location.
In one case there you lot should practise a "pod init" in your terminal
It will then output a file named Podfile .
Open the Podfile in Textedit and add together the line pod "Alamofire", "[version number]" or just simply pod "Alamofire"
Save the file and in your concluding practice a pod install, one time it has finished installation it should have created a Pods folder, [projectname].xcworkspace, and a Podfile.lock .
Open up the file named [projectname.xcworkspace] and your project should have Alamofire installed and set up to go
Role two: Using Alamofire
Uncomplicated Request
For this example we will exist using httpbin.org to simulate our http calls.
For starters permit's do a unproblematic Get asking, in your ViewController.swift type the post-obit:
Save and run the program, one time it runs information technology should impress out in the debug log like this
Its as simple as that!. There are also other HTTP Method calls like POST, PUT, DELETE, ETC.
To do and so its as uncomplicated as adding a method in the Alamofire request by using their already pre-congenital enums for information technology. Just simply type:
// Mail AF.request("https://httpbin.org/post", method: .post) // PUT AF.asking("https://httpbin.org/put", method: .put) // DELETE AF.request("https://httpbin.org/delete", method: .delete)
Asking with Parameters
Non all HTTP Requests are evidently and simple, most pages need information like account data, folio information, category, etc. these can be easily washed in Alamofire by doing so:
let parameters = ["category": "Movies", "genre": "Activity"] AF.request("https://httpbin.org/get", parameters: parameters).response { response in debugPrint(response) } //this is equivalent to https://httpbin.org/become?category=Movies&genre=Action
Nice and easy right?
HTTP Headers
Alamofire has its own back up for HTTP Headers which are a great way to let the client and the server pass boosted information with an HTTP request or response. It can be hands added to our Alamofire Request hands by just adding an HTTPHeaders value:
allow headers: HTTPHeaders = [ .potency(username: "test@e-mail.com", password: "testpassword"), .have("application/json") ] AF.request("https://httpbin.org/headers", headers: headers).responseJSON { response in debugPrint(response) }
It can too be easily combined with other options like sending parameters:
let headers: HTTPHeaders = [ .authorisation(username: "test@email.com", password: "testpassword"), .take("application/json") ] let parameters = ["category": "Movies", "genre": "Activity"] AF.request("https://httpbin.org/headers", headers: headers, parameters: parameters).responseJSON { response in debugPrint(response) }
Handling Say-so
There are a few means to handle authentication using Alamofire, ane of them is via Header as shown in the case above, the others are more direct or brand utilize of the URLCredential data type, here are some examples:
// Normal mode to authenticate using the .authenticate with username and password let user = "test@e-mail.com" allow password = "testpassword" AF.request("https://httpbin.org/basic-auth/\(user)/\(countersign)") .cosign(username: user, password: password) .responseJSON { response in debugPrint(response) } // Authentication using URLCredential let credential = URLCredential(user: user, countersign: countersign, persistence: .forSession) AF.asking("https://httpbin.org/bones-auth/\(user)/\(password)") .authenticate(with: credential) .responseJSON { response in debugPrint(response) }
Response Handling
Alamofire support unlike ways on how to handle a response. A response is expected to provide the client with the resource it requested, or inform the customer that the action it requested has been carried out; or else to inform the client that an error occurred in processing its request.
Basic Response
This basic response does not evaluate any of the response data it just forwards information directly from URLSessionDelegate. Call up of it equally the Alamofire equivalent of cURL to execute a request.
AF.request("https://httpbin.org/go").response { response in debugPrint("Response: \(response)") }
JSON Response
The responseJSON handler uses a JSONResponseSerializer to convert the Data returned past the server into an Whatsoever type using the specified JSONSerialization.ReadingOptions.
AF.request("https://httpbin.org/get").responseJSON { response in debugPrint("Response: \(response)") }
Information Response
The responseData handler uses a DataResponseSerializer to extract and validate the Data returned by the server.
AF.asking("https://httpbin.org/get").responseData { response in debugPrint("Response: \(response)") }
String Response
The responseString handler uses a StringResponseSerializer to convert the Data returned by the server into a String with the specified encoding.
AF.request("https://httpbin.org/get").responseString { response in debugPrint("Response: \(response)") }
Decodable Response
The responseDecodable handler uses a DecodableResponseSerializer to convert the Data returned by the server into the passed Decodable blazon using the specified DataDecoder
struct HTTPBinResponse: Decodable { permit url: String } AF.request("https://httpbin.org/get").responseDecodable(of: HTTPBinResponse.self) { response in debugPrint("Response: \(response)") }
File Download/Handling
Alamofire supports multiple ways of handling data, some data is fine by just fetching by memory, but for larger sets of data Session.download, DownloadRequest, and DownloadResponse is also supported.
Fetch in Memory
Basic fetching of an image by memory, it is not saved and volition require loading again if being fetched again.
AF.download("https://httpbin.org/image/png").responseData { response in if permit data = response.value { self.imageView.image = UIImage(data: data) } }
Download locally
Alamofire supports downloading of file to go far easier to access, retrieve of information technology equally a re-create for faster loading like a cache:
=
allow destination: DownloadRequest.Destination = { _, _ in let documentsURL = FileManager.default.urls(for: .picturesDirectory, in: .userDomainMask)[0] allow fileURL = documentsURL.appendingPathComponent("image.png") return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) } AF.download("https://httpbin.org/epitome/png", to: destination).response { response in debugPrint(response) if response.mistake == nada, let imagePath = response.fileURL?.path { let image = UIImage(contentsOfFile: imagePath) } }
Uploading Data/Files
Uploading information is somewhat like shooting fish in a barrel, you just need to specify what kind of Data you are sending and permit alamofire exercise the rest, it works the aforementioned as a Mail .
permit information = Data("data".utf8) AF.upload(data, to: "https://httpbin.org/post").responseJSON { response in debugPrint(response) }
Information technology is too possible to send a multipart form data like so:
AF.upload(multipartFormData: { multipartFormData in multipartFormData.append(Data("one".utf8), withName: "one") multipartFormData.append(Data("two".utf8), withName: "two") }, to: "https://httpbin.org/mail service") .responseJSON { response in debugPrint(response) }
You can also upload files via Alamofire by just specifying the file name and information technology'southward extension:
let fileURL = Parcel.main.url(forResource: "video", withExtension: "mp4")! AF.upload(fileURL, to: "https://httpbin.org/postal service").responseJSON { response in debugPrint(response) }
Upload/Download Progress
Nosotros at present know that Alamofire supports both downloading and uploading of files, but how practice we track the progress of our upload/download every bit information technology happens? At that place is an option for that, only merely add a .downloadProgress or .uploadProgress but before your response similar then:
// For downloadProgress let destination: DownloadRequest.Destination = { _, _ in let documentsURL = FileManager.default.urls(for: .picturesDirectory, in: .userDomainMask)[0] let fileURL = documentsURL.appendingPathComponent("paradigm.png") render (fileURL, [.removePreviousFile, .createIntermediateDirectories]) } AF.download("https://httpbin.org/epitome/png", to: destination) .downloadProgress { progress in print("Download Progress: \(progress.fractionCompleted)") } .response { response in debugPrint(response) if response.fault == nil, let imagePath = response.fileURL?.path { let image = UIImage(contentsOfFile: imagePath) } } // For uploadProgress allow fileURL = Package.main.url(forResource: "video", withExtension: "mp4")! AF.upload(fileURL, to: "https://httpbin.org/mail") .uploadProgress { progress in print("Upload Progress: \(progress.fractionCompleted)") } .responseJSON { response in debugPrint(response.response) }
Conclusion
That's about it for this essential guide to Swift Alamofire, with these information you should be equipped plenty to use Alamofire in your swift project, if y'all ever need extra info you lot can check out the official guide and documentation here. Proficient luck and accept fun coding! 🙂
Further Reading
- CocoaPods Tutorial using Swift and Xcode: Learn how to install and use Cocoapods in your Xcode project! Take advantage of tertiary party Swift libraries and GitHub repositories hands.
- How To Utilise SwiftyJSON: SwiftyJSON is a Swift library for reading and processing JSON data. Larn how easy information technology is to apply information technology and how it'due south unlike from Codable and JSONSerialization
- How To Submit Your App To the App Store: Acquire how to submit your app to the App Store with App Shop Connect the right way!
Source: https://codewithchris.com/alamofire/
0 Response to "Alamofire 4 Multipart Form Data Video Upload"
Post a Comment