読者です 読者をやめる 読者になる 読者になる

【swift】AFNetworkingで複数ファイルをアップロードする方法メモ

はじめに

余談ですが当初は、ネットワーク系のライブラリはAlamofireを使っていたのですが、xcode7にしてSwift2になったらビルドできなくなりました。Alamofireのバージョンをあげたらビルドは通るようにはなったのですが、ios8以上とういことでした。

客の要望でios7はまだきれないとのことで、別のライブラリを使うほかなくて結局AFNetworkingにおきかえることにしました

で、今回やりたかったのはこれを使ってmultipart形式で複数ファイルをアップロードするということでした。

実装

ApiにはBasic認証もかかっているので、ついでにメモしておきます

let url = "http://example.com/upload"
let parameters: Dictionary<String,AnyObject> = ["key1": "value1", "key2": "value2"] // 画像以外に送りたいパラメータ
let images: Dictionary<String,UIImage> = ["image1": image1, "image2": image2] // 画像データ

// Basic認証の情報
let user = "user"
let pass = "pass"

let manager: AFHTTPRequestOperationManager = AFHTTPRequestOperationManager()
manager.requestSerializer.setAuthorizationHeaderFieldWithUsername(user, password: pass)
manager.POST(url, parameters: parameters, constructingBodyWithBlock: { (data) in
    // 画像データを追加
    // htmlの<input type="file" ・・・>の部分
    for (key, value) in images
    {
        let name = key
        let imageData = NSData(data: UIImageJPEGRepresentation(value, 1)!)
        data.appendPartWithFileData(imageData, name: name, fileName: name, mimeType: "image/jpeg")
    }
}, success: { (operation: AFHTTPRequestOperation!, responsobject: AnyObject!) in
    // アップロード成功時の処理
}, failure: { (operation, error) in
   // アップロード失敗時の処理
})

以上です