Skip to content

Instantly share code, notes, and snippets.

@Ziewvater
Created March 14, 2015 17:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ziewvater/56ca0842ceadbd06d371 to your computer and use it in GitHub Desktop.
Save Ziewvater/56ca0842ceadbd06d371 to your computer and use it in GitHub Desktop.
Uploading to Gfycat using AFNetworking in Swift
import UIKit
let GfycatPOSTURL = "https://gifaffe.s3.amazonaws.com/"
let GfycatPolicy = "eyAiZXhwaXJhdGlvbiI6ICIyMDIwLTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICAgICAgICAgICAiY29uZGl0aW9ucyI6IFsKICAgICAgICAgICAgeyJidWNrZXQiOiAiZ2lmYWZmZSJ9LAogICAgICAgICAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAiIl0sCiAgICAgICAgICAgIHsiYWNsIjogInByaXZhdGUifSwKCSAgICB7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6ICIyMDAifSwKICAgICAgICAgICAgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgIiJdLAogICAgICAgICAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMCwgNTI0Mjg4MDAwXQogICAgICAgICAgICBdCiAgICAgICAgICB9"
let GfycatAWSAccessKeyId = "AKIAIT4VU4B7G2LQYKZQ"
let GfycatSignature = "mk9t/U/wRN4/uU01mXfeTe2Kcoc="
let GfycatTranscodeURL = "http://upload.gfycat.com/transcode/"
class GfycatHandler: NSObject {
func uploadGif(gifData: NSData!, successHandler: ((gfycatURL: NSURL) -> Void)?) {
var url: NSURL = NSURL(string: GfycatPOSTURL)!
var request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.timeoutInterval = 60
// Create data payload
var error: NSError?
var uniqueKey = randomString(10)
println("Created unique key: \(uniqueKey)")
var parameters: Dictionary<String, String> = [
"key" : uniqueKey,
"acl" : "private",
"AWSAccessKeyId" : GfycatAWSAccessKeyId,
"policy" : GfycatPolicy,
"success_action_status" : "200",
"signature" : GfycatSignature,
"Content-Type" : "image/gif"
]
var manager = AFHTTPRequestOperationManager()
manager.POST(GfycatPOSTURL,
parameters: nil,
constructingBodyWithBlock: { (formData: AFMultipartFormData!) -> Void in
for (key, value) in parameters {
formData.appendPartWithFormData(value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}
// Make sure to add the image last, else AWS throws an error
formData.appendPartWithFileData(gifData, name: "file", fileName: "photo", mimeType: "image/gif")
},
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
println("Operation: \(operation)")
println("Response: \(responseObject)")
self.transCodeUploadedGif(uniqueKey, successHandler: successHandler)
}) { (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in
println("Operation: \(operation)")
println("Response string: \(operation.responseString)")
println("Error: \(error)")
}
}
func transCodeUploadedGif(uniqueKey: String, successHandler: ((gfycatURL: NSURL) -> Void)? ) {
var manager = AFHTTPRequestOperationManager()
var transcodeURL = GfycatTranscodeURL + uniqueKey
manager.GET(transcodeURL,
parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
println("Operation; \(operation)")
println("Response: \(responseObject)")
if let json = responseObject as? Dictionary<String, AnyObject> {
if let name = json["gfyName"] as? String {
if let url = NSURL(string: "http://gfycat.com/"+name) {
if successHandler != nil {
successHandler!(gfycatURL: url)
}
}
}
}
}) { (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in
println("Operation; \(operation)")
println("Error: \(error)")
}
}
func randomString(length: Int) -> String {
var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var characters = Array(string)
var randomString: String = ""
var setLength = UInt32(countElements(characters))
for (var i=0; i < length; i++){
var rand = arc4random_uniform(setLength)
var character = characters[Int(rand)]
randomString.append(character)
}
return randomString
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment