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

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

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

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

Q&A

解決済

1回答

4326閲覧

SwiftからPHPへ画像データとテキストの同時アップロードについて

IzuShin

総合スコア68

Swift

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

0グッド

0クリップ

投稿2017/03/30 02:43

編集2017/03/31 03:22

現在、以下のようなコードでSwiftからPHPへ画像データを送信しています。

swift

1// 通信のリクエスト生成. 2let myCofig: URLSessionConfiguration = URLSessionConfiguration.default 3let url:NSURL = NSURL(string: "http://xxx.xxx.xxx./update_picture.php")! 4var request: URLRequest = URLRequest(url: url as URL) 5request.httpMethod = "POST" 6 7let session:URLSession = URLSession(configuration: myCofig, delegate: self, delegateQueue: OperationQueue.main) 8         9// リサイズ後のUIImageを用意. 10let image:UIImage! = self.CameraView.image?.ResizeÜIImage(width: resizeWidth, height: resizeHeight) 11         12// 画像データを読み出し、Data型に変換する. 13let file: NSData = UIImagePNGRepresentation(image)! as NSData 14         15// アップロード用のタスクを生成. 16let task:URLSessionUploadTask = session.uploadTask(with: request, from: file as Data)

PHP

1$image = file_get_contents("php://input"); 2if (!$image) { 3 print('画像取得に失敗しました。<br>'); 4} 5 6//ファイル名を作成 7$filename = date('YmdHis').'.png'; 8 9// 取得したバイナリデータを画像(png)として保存. 10file_put_contents('/var/www/photos/'.$filename,$image);

これは正常に動作しているのですが、画像データと同時にテキストデータも送信したいと考えており、以下のように記述しました。

swift

1// 通信のリクエスト生成. 2let conference_key = self.ConferenceKeyLabel.text! 3print(conference_key) 4let post = "conference_key=\(conference_key)" 5let postdata = post.data(using:String.Encoding.utf8)! 6         7let myCofig: URLSessionConfiguration = URLSessionConfiguration.default 8let url:NSURL = NSURL(string: "http://xxx.xxx.xxx./update_picture.php")! 9var request: URLRequest = URLRequest(url: url as URL) 10request.httpMethod = "POST" 11 12request.setValue("application/x-www-form-urlencoded",forHTTPHeaderField: "Content-Type") 13let length = postdata.count 14request.setValue("\(length)",forHTTPHeaderField: "Content-Length") 15request.httpBody = postdata 16         17let session:URLSession = URLSession(configuration: myCofig, delegate: self, delegateQueue: OperationQueue.main) 18         19// リサイズ後のUIImageを用意. 20let image:UIImage! = self.CameraView.image?.ResizeÜIImage(width: resizeWidth, height: resizeHeight) 21         22// 画像データを読み出し、Data型に変換する. 23let file: NSData = UIImagePNGRepresentation(image)! as NSData 24         25// アップロード用のタスクを生成. 26let task:URLSessionUploadTask = session.uploadTask(with: request, from: file as Data) 27

PHP

1$image = file_get_contents("php://input"); 2if (!$image) { 3 print('画像取得に失敗しました。<br>'); 4} 5 6//ファイル名を作成 7$filename = date('YmdHis').'.png'; 8 9//会議Keyの取得 10$conference_key = $_POST["conference_key"]; 11 12// 取得したバイナリデータを画像(png)として保存. 13file_put_contents('/var/www/photos/'.$filename,$image);

コンパイルは通って実行もできるのですが、PHP側でconference_keyの値が受け取れません。
Swiftの通信記述に問題があると思うのですが、どのように書けばよろしいのでしょうか?
ご存知の方がおられましたら教えてください。

色々と試しているのですが、上手くいきません。
画像とテキストの同時送信が可能かどうかだけでもご存知の方がおられましたら教えてください。

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

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

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

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

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

guest

回答1

0

自己解決

下記の質問を参考にして解決できました。
https://teratail.com/questions/34157

投稿2017/04/02 06:04

IzuShin

総合スコア68

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問