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

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

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

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

Q&A

解決済

1回答

3551閲覧

[swift]画像アップロードについて

Tsubasa283

総合スコア27

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

0グッド

0クリップ

投稿2016/08/07 13:02

こんばんは。
現在簡単な画像アップロードアプリを作成しようと考えております。
先に画像アップロード部分のみを実装したいと考えており、参考サイトより作業しているのですが、use of unresolved identifierエラーで先に進めておりません。

iPhoneアプリは今回初めて作成しており、プロトコルとデリゲートで詰まっているのか"self"が定義できてないとのエラーはなんとなくわかるのですが、どこをどう直していいのか、アドバイスいただければと思い投稿させていただきました。
併せてこの概念は理解しておいたほうがいいというものもあればご教授いただければ幸いです。

画像アップロード参考サイト1

画像アップロード参考サイト2

swift

1 2import UIKit 3 4class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{ 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 override func didReceiveMemoryWarning() { 10 super.didReceiveMemoryWarning() 11 } 12 13 @IBAction func uploadButtonTapped(sender: AnyObject) { 14 15 myImageUploadRequest() 16 } 17 18 @IBOutlet weak var myimageView: UIImageView! 19 @IBAction func selectPhotoButtonTapped(sender: AnyObject) { 20 21 let myPickerController = UIImagePickerController() 22 myPickerController.delegate = self; 23 myPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 24 25 self.presentViewController(myPickerController, animated: true, completion: nil) 26 } 27} 28 29extension NSMutableData { 30 func appendString(string: String) { 31 let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 32 appendData(data!) 33 } 34} 35 36 //画像のアップロード処理 37 func myImageUploadRequest(){ 38 39 //myUrlにはphpファイルのアドレスを入れる 40 let myUrl = NSURL(string:"http://example.com/upload.php") 41 let request = NSMutableURLRequest(URL:myUrl!) 42 request.HTTPMethod = "POST" 43 44 //下記のパラメータはあくまでもPOSTの例 45 let param = [ 46 "userId" : "1234" 47 ] 48 49 let boundary = generateBoundaryString() 50 51 request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 52 53 let imageData = UIImageJPEGRepresentation(self.imageForUpload.image, 1) 54 55 if(imageData==nil) { return; } 56 request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", imageDataKey: imageData, boundary: boundary) 57 58 //myActivityIndicator.startAnimating(); 59 60 let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 61 data, response, error in 62 if error != nil { 63 print("error=\(error)") 64 return 65 } 66 // レスポンスを出力 67 print("******* response = \(response)") 68 let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 69 print("****** response data = \(responseString!)") 70 71 dispatch_async(dispatch_get_main_queue(),{ 72 //アップロード完了 73 }); 74 } 75 task.resume() 76 77 } 78 79 80 func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 81 let body = NSMutableData() 82 if parameters != nil { 83 for (key, value) in parameters! { 84 body.appendString("--\(boundary)\r\n") 85 body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 86 body.appendString("\(value)\r\n") 87 } 88 } 89 let filename = "user-profile.jpg" 90 let mimetype = "image/jpg" 91 body.appendString("--\(boundary)\r\n") 92 body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 93 body.appendString("Content-Type: \(mimetype)\r\n\r\n") 94 body.appendData(imageDataKey) 95 body.appendString("\r\n") 96 body.appendString("--\(boundary)--\r\n") 97 return body 98 } 99 100 func generateBoundaryString() -> String { 101 return "Boundary-\(NSUUID().UUIDString)" 102 } 103 104 //カメラで写真を取る 105 func pickImageFromCamera() { 106 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { 107 let controller = UIImagePickerController() 108 controller.delegate = self 109 controller.sourceType = UIImagePickerControllerSourceType.Camera 110 self.presentViewController(controller, animated: true, completion: nil) 111 } 112 } 113 114 //写真をライブラリから選択 115 func pickImageFromLibrary() { 116 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { 117 let controller = UIImagePickerController() 118 controller.delegate = self 119 controller.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 120 self.presentViewController(controller, animated: true, completion: nil) 121 } 122 } 123 //画像が選択されたら呼び出される 124 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { 125 if info[UIImagePickerControllerOriginalImage] != nil { 126 let image = info[UIImagePickerControllerOriginalImage] as! UIImage 127 128 //iamgeForUploadというUIImageを用意しておいてそこに一旦預ける 129 self.imageForUpload.image = image 130 self.myImageUploadRequest() 131 } 132 picker.dismissViewControllerAnimated(true, completion: nil) 133 } 134 135

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

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

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

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

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

guest

回答1

0

ベストアンサー

コピペしたところエラーが複数でていました。

①「かっこ」の位置が間違えているのでエラーになっています。
self.imageForUploadが定義されていないのでエラーになっています。
※ コメントに『iamgeForUploadというUIImageを用意しておいてそこに一旦預ける』と書いてありますがself.imageForUpload.imageとなっているのでself.imageForUploadの間違えかと思います。

とりあえずそこまで直してエラーは無くなりました、以下にそのコードを載せますのでもう一度見なおしてみてください。

swift

1import UIKit 2 3class ViewController1: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{ 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 } 7 8 override func didReceiveMemoryWarning() { 9 super.didReceiveMemoryWarning() 10 } 11 12 @IBAction func uploadButtonTapped(sender: AnyObject) { 13 14 myImageUploadRequest() 15 } 16 17 @IBOutlet weak var myimageView: UIImageView! 18 var imageForUpload: UIImage! 19 20 @IBAction func selectPhotoButtonTapped(sender: AnyObject) { 21 22 let myPickerController = UIImagePickerController() 23 myPickerController.delegate = self; 24 myPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 25 26 self.presentViewController(myPickerController, animated: true, completion: nil) 27 } 28 29 30 //画像のアップロード処理 31 func myImageUploadRequest(){ 32 33 //myUrlにはphpファイルのアドレスを入れる 34 let myUrl = NSURL(string:"http://example.com/upload.php") 35 let request = NSMutableURLRequest(URL:myUrl!) 36 request.HTTPMethod = "POST" 37 38 //下記のパラメータはあくまでもPOSTの例 39 let param = [ 40 "userId" : "1234" 41 ] 42 43 let boundary = generateBoundaryString() 44 45 request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 46 47 let imageData = UIImageJPEGRepresentation(self.imageForUpload, 1) 48 49 if(imageData==nil) { return; } 50 request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", imageDataKey: imageData!, boundary: boundary) 51 52 //myActivityIndicator.startAnimating(); 53 54 let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 55 data, response, error in 56 if error != nil { 57 print("error=\(error)") 58 return 59 } 60 // レスポンスを出力 61 print("******* response = \(response)") 62 let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 63 print("****** response data = \(responseString!)") 64 65 dispatch_async(dispatch_get_main_queue(),{ 66 //アップロード完了 67 }); 68 } 69 task.resume() 70 71 } 72 73 func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 74 let body = NSMutableData() 75 if parameters != nil { 76 for (key, value) in parameters! { 77 body.appendString("--\(boundary)\r\n") 78 body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 79 body.appendString("\(value)\r\n") 80 } 81 } 82 let filename = "user-profile.jpg" 83 let mimetype = "image/jpg" 84 body.appendString("--\(boundary)\r\n") 85 body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 86 body.appendString("Content-Type: \(mimetype)\r\n\r\n") 87 body.appendData(imageDataKey) 88 body.appendString("\r\n") 89 body.appendString("--\(boundary)--\r\n") 90 return body 91 } 92 93 func generateBoundaryString() -> String { 94 return "Boundary-\(NSUUID().UUIDString)" 95 } 96 97 //カメラで写真を取る 98 func pickImageFromCamera() { 99 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { 100 let controller = UIImagePickerController() 101 controller.delegate = self 102 controller.sourceType = UIImagePickerControllerSourceType.Camera 103 self.presentViewController(controller, animated: true, completion: nil) 104 } 105 } 106 107 //写真をライブラリから選択 108 func pickImageFromLibrary() { 109 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { 110 let controller = UIImagePickerController() 111 controller.delegate = self 112 controller.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 113 self.presentViewController(controller, animated: true, completion: nil) 114 } 115 } 116 //画像が選択されたら呼び出される 117 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 118 if info[UIImagePickerControllerOriginalImage] != nil { 119 let image = info[UIImagePickerControllerOriginalImage] as! UIImage 120 121 //iamgeForUploadというUIImageを用意しておいてそこに一旦預ける 122 self.imageForUpload = image 123 self.myImageUploadRequest() 124 } 125 picker.dismissViewControllerAnimated(true, completion: nil) 126 } 127} 128 129extension NSMutableData { 130 func appendString(string: String) { 131 let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 132 appendData(data!) 133 } 134}

投稿2016/08/07 13:30

_Kentarou

総合スコア8490

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

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

Tsubasa283

2016/08/07 14:13

ありがとうございます。おかげさまで、エラー解消致しました。 お手数をおかけいたしました。 ボタン動作でのチェックをしてまいります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問