Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to upload MultipartFormData with authentication using Alamofire

How to upload MultipartFormData with authentication using Alamofire? The part that I don't understand is where to put .authenticate(user: username, password: password).? This is how I usually upload pictures using MultipartFormData:

Alamofire.upload(
        .POST, "https://myExampleUrl/photo/upload", headers: headers, multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(data: "default".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"_formname")
            multipartFormData.appendBodyPart(fileURL: fileUrl, name: "photo")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {

            case .Success(let upload, _, _):
                upload.responseString { response in
                    debugPrint(response)
                }

            case .Failure(let encodingError):
                print(encodingError)
            }
        }
    )

I think it's possible to add authentication process into headers?

like image 578
Xernox Avatar asked Nov 25 '25 13:11

Xernox


1 Answers

Haven't had much time to explore the API for rilbits.com. When I visited the address in Safari, I got the following error:

Please add 'Authorization' or 'X-Access-Token' header to your request 

This suggests 2 options for you:

  1. Login first and get back an access token, which you can then use the for the upload request
  2. Send a basic Authorization header along with the upload request.

Here's how you can send the Authorization header (second option):

let username = "username"
let password = "password"

let credentialData = "\(username):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!                  
let base64Credentials = credentialData.base64EncodedStringWithOptions([])
let headers = ["Authorization": base64Credentials]

Alamofire.upload(
    .POST,
    "https://rilbits.com/supersafe/photo/upload",
    headers: headers,
    multipartFormData: { multipartFormData in
        let data = "default".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        multipartFormData.appendBodyPart(data: data, name: "_formname")
        multipartFormData.appendBodyPart(fileURL: fileURL, name: "photo")
    },
    encodingCompletion: { encodingResult in
        switch encodingResult {

        case .Success(let upload, _, _):
            upload.responseString { response in
                debugPrint(response)
            }

        case .Failure(let encodingError):
            print(encodingError)
        }
    }
)

Full disclosure:

  • The authorization code was lifted from Alamofire's readme
  • I didn't test the code above
like image 149
Code Different Avatar answered Nov 27 '25 03:11

Code Different



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!