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

swiftでファイルアップロードする方法メモ

はじめに

簡単にできるかと思ってたけどけっこう時間かかったので実装方法をメモしておきます。

api連携の処理は全てAlamofireというライブラリを使って実装する予定だったのですが、これを使ってファイルアップロードの仕方がわからなかったので別の方法を検討することにしました。

今回やりたかったのは、サーバ側ではhtmlのformを使ってファイル送信されるのと同様の処理にしたかったので、multipart/form-dataとして送信することがやりたかったこととなります。

で、やりかたあるのかもわからないけど調べてるかんじだと自前でリクエストデータを作らなくてはならなそうで、他のライブラリで何かないのかなとおもって調べてたところ、以下のライブラリがズバリぽかったのでこちらを使って実装してみました。
nghialv/Net · GitHub

実装方法

swift

var fileUrl = NSURL(string: "file://path/to/image.jpeg")

var err: NSError?;
var imageData :NSData = NSData(contentsOfURL: fileUrl,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!;
var img:UIImage = UIImage(data: imageData)!

var url = "/post"
var params = ["file": NetData(jpegImage: img, compressionQuanlity: 100, filename: "image.jpeg")]
//var params = ["file": NetData(pngImage: img, filename: fileName)]

//送信する
var net = Net(baseUrlString: "http://example.com/path/to")
net.POST(url, params: params, successHandler: {
    responseData in
    // 成功
}, failureHandler: { error in
    // 失敗
})

サーバ側

// こんなかんじでアップロードできることが確認できます
var_dump($_FILES);

コードそのままなんですけど、また頻繁に使いそうなのでメモしておきました。

以上です