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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

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

Q&A

解決済

1回答

9065閲覧

swiftで画像アップロードと同時にPOSTでデータも送りたい

recode

総合スコア31

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

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

0グッド

0クリップ

投稿2016/05/05 16:59

編集2016/05/05 17:34

swiftで画像データと同時にPOSTでデータも送る方法がわかりません。

下記のリンクの方法では、画像アップロードは出来たのですが、他の情報(画像のidなど)が送れず、画像をデータベースと紐づけることができません。
swiftで画像アップロードの方法


swiftから、FILESとPOSTの両方で送信する方法を、知っている方がいましたら是非教えていただきたいです。
もしくは画像アップロードで、より最適な方法があるのであればURLでもよろしいので是非教えていただきたいです。

よろしくお願いいたします。

swift

1// 通信のリクエスト生成. 2let myCofig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 3 4let myUrl2:NSURL = NSURL(string: "http://test.test/upload.php")! 5 6let myRequest2:NSMutableURLRequest = NSMutableURLRequest(URL: myUrl2) 7myRequest2.HTTPMethod = "POST" 8 9let mySession:NSURLSession = NSURLSession(configuration: myCofig, delegate: self, delegateQueue: NSOperationQueue.mainQueue()) 10 11// 画像データを読み出し、Data型に変換する. 12var myfile:NSData = UIImageJPEGRepresentation(self.view_img_area!.image!, 0.5)! 13 14// アップロード用のタスクを生成. 15var myTask:NSURLSessionUploadTask = mySession.uploadTaskWithRequest(myRequest2, fromData: myfile) 16 17// タスクの実行. 18myTask.resume()

PHP

1<?php 2//PHP側で、画像データと他のPOSTデータも受け取りたい 3// リクエストBodyからファイルのデータを取得. 4$image = file_get_contents("php://input"); 5 6// 取得したバイナリデータを画像(png)として保存. 7file_put_contents('dl.png',$image); 8?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ちょっと面倒ですが、自分でマルチパートデータを作成すれば送れます。

http://chicketen.blog.jp/archives/1282033.html
が参考になると思います。

投稿2016/05/07 09:38

TakeOne

総合スコア6299

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

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

recode

2016/05/07 12:19

ありがとうございます!見てみます!
recode

2016/05/08 09:50 編集

無事に解決しました。 コードはこのように実装しました! let imageData:NSData = NSData(data:UIImageJPEGRepresentation(UIImage("なまえ"), 1.0)!) let url = NSURL(string: "おくるURL") var urlRequest_img : NSMutableURLRequest = NSMutableURLRequest() if let u = url{ urlRequest_img.URL = u urlRequest_img.HTTPMethod = "POST" urlRequest_img.timeoutInterval = 30.0 } let uniqueId = NSProcessInfo.processInfo().globallyUniqueString var body: NSMutableData = NSMutableData() var postData :String = String() var boundary:String = "---------------------------\(uniqueId)" urlRequest_img.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") postData += "--\(boundary)\r\n" postData += "Content-Disposition: form-data; name=\"text\"\r\n" postData += "\r\n\(self.proposal_text_input!.text!)\r\n" postData += "--\(boundary)\r\n" postData += "Content-Disposition: form-data; name=\"image\"; filename=\"name\"\r\n" postData += "Content-Type: image/jpeg\r\n\r\n" body.appendData(postData.dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData(imageData) postData = String() postData += "\r\n" postData += "\r\n--\(boundary)--\r\n" body.appendData(postData.dataUsingEncoding(NSUTF8StringEncoding)!) urlRequest_img.HTTPBody = NSData(data:body) let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config) let task_img: NSURLSessionDataTask = session.dataTaskWithRequest(urlRequest_img, completionHandler: { data, request, error in let anyObj: AnyObject! do { if(data != nil){ anyObj = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0)) }else{ anyObj = nil } } catch _ as NSError { anyObj = nil } self.condition.signal() self.condition.unlock() }) self.condition.lock() task_img.resume() self.condition.wait() self.condition.unlock()
IzuShin

2017/04/01 18:00

recodeさん 私も画像とテキストの同時送信で悩んでおります。 添付のコードを参考にさせていただいているのですが、PHP側も教えていただけないでしょうか。 どうかよろしくお願いします。
IzuShin

2017/04/01 18:20

PHP側の画像の取得方法がわかっておりません。 もともと $image = file_get_contents("php://input"); と記述されていたところは $image = $_FILES["image"]; のように記述する事になるのでしょうか?
IzuShin

2017/04/02 06:06

$image = file_get_contents($_FILES["image"]["tmp_name"]); とする事で画像取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問