swiftで画像データと同時にPOSTでデータも送る方法がわかりません。
下記のリンクの方法では、画像アップロードは出来たのですが、他の情報(画像のidなど)が送れず、画像をデータベースと紐づけることができません。
swiftで画像アップロードの方法
swiftから、FILESとPOSTの両方で送信する方法を、知っている方がいましたら是非教えていただきたいです。
もしくは画像アップロードで、より最適な方法があるのであればURLでもよろしいので是非教えていただきたいです。
よろしくお願いいたします。
// 通信のリクエスト生成.
let myCofig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let myUrl2:NSURL = NSURL(string: "http://test.test/upload.php")!
let myRequest2:NSMutableURLRequest = NSMutableURLRequest(URL: myUrl2)
myRequest2.HTTPMethod = "POST"
let mySession:NSURLSession = NSURLSession(configuration: myCofig, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
// 画像データを読み出し、Data型に変換する.
var myfile:NSData = UIImageJPEGRepresentation(self.view_img_area!.image!, 0.5)!
// アップロード用のタスクを生成.
var myTask:NSURLSessionUploadTask = mySession.uploadTaskWithRequest(myRequest2, fromData: myfile)
// タスクの実行.
myTask.resume()
<?php
//PHP側で、画像データと他のPOSTデータも受け取りたい
// リクエストBodyからファイルのデータを取得.
$image = file_get_contents("php://input");
// 取得したバイナリデータを画像(png)として保存.
file_put_contents('dl.png',$image);
?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ちょっと面倒ですが、自分でマルチパートデータを作成すれば送れます。
http://chicketen.blog.jp/archives/1282033.html
が参考になると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/07 21:19
2016/05/08 18:48 編集
コードはこのように実装しました!
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()
2017/04/02 03:00
私も画像とテキストの同時送信で悩んでおります。
添付のコードを参考にさせていただいているのですが、PHP側も教えていただけないでしょうか。
どうかよろしくお願いします。
2017/04/02 03:20
もともと
$image = file_get_contents("php://input");
と記述されていたところは
$image = $_FILES["image"];
のように記述する事になるのでしょうか?
2017/04/02 15:06
とする事で画像取得できました。