質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2839閲覧

[swift]画像をpostしたい

tommy19970714

総合スコア71

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2015/04/16 15:21

このhtmlのpostするコードと同じものをswiftで書きたいです。
これはdocomoのAPIの画像認識(顔、オブジェクト認識)【Powerd by PUX】というものです。APIキーは適当に書き換えてます。
https://dev.smt.docomo.ne.jp/?p=common_page&p_name=pux_objectrecognition

lang

1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <title>登録サンプル</title> 5</head> 6<body> 7 <form action="https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/objectRecognition?APIKEY=2f4f486738429hsihiushdiuhfiufs8274982834" method="post" enctype="multipart/form-data"> 8 <input type="file" name="inputFile" /> 9 <input type="text" name="mode" value="register" /> 10 <input type="submit" value="SUBMIT" /> 11 </form> 12</body> 13</html>

ここのサイトを参考にさせていただいてswiftを書いてみました。
https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/13-http/postwo-song-xinsuru

しかし、 送信するデータを生成・リクエストにセットするときのinputFile=にどういった値を入れたらいいのか分かりません。アプリのディレクトリにあるjpegファイルを送信したいです。写真をどう変換してあげたらいいのでしょうか。教えていただけると嬉しいです。お願いします。

lang

1// 2// ViewController.swift 3// post 4 5 6import UIKit 7 8class ViewController: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate{ 9 10 @IBOutlet weak var myTextView: UITextView! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 self.view.backgroundColor = UIColor.lightGrayColor() 16 17 //表示用のTextViewを用意 18 myTextView = UITextView(frame: CGRectMake(10, 50, self.view.frame.width - 20, 500)) 19 20 myTextView.backgroundColor = UIColor(red: 0.9, green: 0.9, blue: 1, alpha: 1.0) 21 myTextView.layer.masksToBounds = true 22 myTextView.layer.cornerRadius = 20.0 23 myTextView.layer.borderWidth = 1 24 myTextView.layer.borderColor = UIColor.blackColor().CGColor 25 myTextView.font = UIFont.systemFontOfSize(CGFloat(20)) 26 myTextView.textColor = UIColor.blackColor() 27 myTextView.textAlignment = NSTextAlignment.Left 28 myTextView.dataDetectorTypes = UIDataDetectorTypes.All 29 myTextView.layer.shadowOpacity = 0.5 30 myTextView.layer.masksToBounds = false 31 32 self.view.addSubview(myTextView) 33 34 35 // 通信用のConfigを生成. 36 let myConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("backgroundTask") 37 // Sessionを生成. 38 var mySession:NSURLSession = NSURLSession(configuration: myConfig, delegate: self, delegateQueue: nil) 39 // 通信先のURLを生成. 40 let myUrl:NSURL = NSURL(string: "https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/objectRecognition?APIKEY=2f4f48516242676d4e617a77fgakufhakuh24379824871514e38362846149814")! 41 42 // POST用のリクエストを生成. 43 let myRequest:NSMutableURLRequest = NSMutableURLRequest(URL: myUrl) 44 // POSTのメソッドを指定. 45 myRequest.HTTPMethod = "POST" 46 47 // 送信するデータを生成・リクエストにセット. 48 let str:NSString = "inputFile=ここに何を入れたらいいのでしょうか&mode=regitster" 49 let myData:NSData = str.dataUsingEncoding(NSUTF8StringEncoding)! 50 myRequest.HTTPBody = myData 51 52 // タスクの生成. 53 let myTask:NSURLSessionDataTask = mySession.dataTaskWithRequest(myRequest) 54 55 // タスクの実行. 56 myTask.resume() 57 58 } 59 /* 60 通信が終了したときに呼び出されるデリゲート. 61 */ 62 func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { 63 64 // 帰ってきたデータを文字列に変換. 65 var myData:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)! 66 67 // バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる. 68 dispatch_async(dispatch_get_main_queue(), { 69 self.myTextView.text = String(myData) 70 }) 71 72 } 73 74 func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) { 75 println("URLSessionDidFinishEventsForBackgroundURLSession") 76 77 // バックグラウンドからフォアグラウンドの復帰時に呼び出されるデリゲート. 78 } 79 override func didReceiveMemoryWarning() { 80 super.didReceiveMemoryWarning() 81 } 82} 83

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

画像をアップロードするには、マルチパート形式でPOSTしてやる必要があります。
こちらのサイト様を参考にSwiftで書いてやればいいのではないかと。
http://blog.o24.me/?p=38

NSDataを用意するところは、こんな感じでしょうか。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"png"];
NSData *uploadData = [NSData dataWithContentsOfFile:filePath];

アプリのバンドルファイルではなく、Documentsディレクトリにあるファイルを読み込む場合は
filePathの部分をDocuments配下のパスを指すように変えてやればいいです。

ネットワークまわりの処理を簡単にしてくれるようなライブラリもあるので、調べてみるといいかもしれません。
AFNetworkingとか、Alamofireが有名です。

投稿2015/04/17 01:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問