iOS
Swift
swift4
Alamofire4

Swift 4 Alamofire 4.0を使って、multipart/form-dataのリクエスト

はじめに

Alamofire 4.0を使って、multipart/form-data のPOSTリクエストを行う方法です。
ライブラリの導入方法は割愛します。

サンプルコード

let requestUrl = "http://localhost:8080/"

let filePath = ... // 送信データのファイルパス

let dataA = "hogehoge".data(using: .utf8)!
let dataB = "fugafuga".data(using: .utf8)!
let dataC = URL(fileURLWithPath: filePath)

Alamofire.upload(multipartFormData: { (multipartFormData) in
    // 送信データを設定
    multipartFormData.append(dataA, withName: "dataA", mimeType: "text/plain")
    multipartFormData.append(dataB, withName: "dataB", mimeType: "text/plain")
    multipartFormData.append(dataC, withName: "dataC", fileName: "send.png", mimeType: "image/png")
}, to: requestUrl) { (encodingResult) in
    switch encodingResult {
    case .success(let upload, _, _):
        upload.responseJSON { response in // ← JSON形式で受け取る
            if !response.result.isSuccess {
                print("# ERROR")
            } else {
                print("# SUCCESS")
                print(response)
            }
        }
    case .failure(let encodingError):
        print(encodingError)
    }
}

POST結果

image.png

上記のログは node.js を使って出力しました。

post.js
var express = require('express');
var fs = require('fs');
var app = express();

app.listen(8080);
console.log('Server is online.');

app.post('/', function (req, res) {
    var body = '';
    req.on('data', function (data) {
        body += data;
    });
    req.on('end', function () {
        fs.writeFile("request.log", body, () => {});
    });
    res.json('{"result":"OK"}');
})