前回 "swiftでサーバーにテキストをPOSTする" でテキスト投稿についてメモしました。今回は画像ファイルの投稿についてメモします。
画像投稿は難しいということなので net というライブラリを使うことにしました。
そのためテキストを送信するコードも大きく変わっています。
Netについては "最高なHttpRequest in Swift" をみてください。
ライブラリ
Netのライブラリ:GitHub をForkしてDesktopにダウンロードしたNetをxcodeのファイルにコピーしました。
コード
import UIKit
class ViewController: UIViewController, UITextFieldDelegate, NSURLSessionTaskDelegate{
var json:NSData!
let net = Net(baseUrlString: "送信先のURL")
override func viewDidLoad() {
super.viewDidLoad()
//背景色をorangeにする
self.view.backgroundColor = UIColor.orangeColor()
// UITextFieldを作成する.
let myTextField: UITextField = UITextField(frame: CGRectMake(0,0,200,30))
// はじめに表示する文字を代入する.
myTextField.text = ""
// Delegateを設定する.
myTextField.delegate = self
// 枠を表示する.
myTextField.borderStyle = UITextBorderStyle.RoundedRect
// UITextFieldの表示する位置を設定する.
myTextField.layer.position = CGPoint(x:self.view.bounds.width/2,y:100);
// Viewに追加する.
self.view.addSubview(myTextField)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*
UITextFieldが編集終了する直前に呼ばれる.
*/
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
//送信する文字をtextFieldから取得する
let str = "\(textField.text)"
//textFieldを空白になおす
textField.text = ""
//送信する画像を設定する
let img = UIImage(named: "logo.png")!
//送信先のpostを設定する
let url = "/post"
//送信するパラメータを設定する.rubyであればparams[:text]がstrになる
let params = ["text": str, "file": NetData(pngImage: img, filename: "logo")]
//送信する
net.POST(url, params: params, successHandler: {
responseData in
//let result = responseData.json(error: nil)
NSLog("Success")
}, failureHandler: { error in
NSLog("Error")
})
return true
}
/*
改行ボタンが押された際に呼ばれる.
*/
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
注意:送信先が http://example.com/post なら
let net = Net(baseUrlString: "http://example.com")
let url = "/post"
とします。
問題と次の目標
送信後に "Error" がでますが問題なく送信できています。おそらくサーバーサイドからのresponseDataがないからでしょう。次はカメラで撮った画像を送信できるようにします。
参考
Netのライブラリ:GitHub
https://github.com/nghialv/Net
Netで画像投稿などの補足情報
http://da1hara.hatenablog.com/entry/2014/11/12/042718
テキストフィールドの生成
https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/uikit/004-uitextviewde-wen-ziwo-ru-li
私が作った数学サイト(アプリで投稿したいサイト)
https://question-board.herokuapp.com