以前に質問した内容に近いのですが、またご教授いただければ幸いです。
下記のサイトを参考にしながら、ファイルのアップロードをしたいと考えております。
【Swift】Swift + PHPでiOSから画像をアップロードする
シミュレータ上では、動作はしているのですが、画像が指定したファイル(/Applications/MAMP/htdocs/uploadfile)に保存されておりません。
エラーのメッセージも出ずで、どのように対応したらいいのかご教授いただければ幸いです。
swift
1 2import UIKit 3 4class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{ 5 @IBOutlet weak var myImageView: UIImageView! 6 var imageForUpload: UIImage! 7 8 @IBOutlet weak var imageview: UIImageView! 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 } 15 16 @IBAction func uploadButtonTapped(sender: AnyObject) { 17 myImageUploadRequest() 18 } 19 20 @IBAction func selectPhotoButtonTapped(sender: AnyObject) { 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 func myImageUploadRequest(){ 29 30 //myUrlには自分で用意したphpファイルのアドレスを入れる 31 let myUrl = NSURL(string:"http://http://localhost/upload.php") 32 let request = NSMutableURLRequest(URL:myUrl!) 33 request.HTTPMethod = "POST" 34 //下記のパラメータはあくまでもPOSTの例 35 let param = [ 36 "userId" : "1234" 37 ] 38 39 let boundary = generateBoundaryString() 40 41 request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 42 43 let imageData = UIImageJPEGRepresentation(self.imageForUpload, 1) 44 45 if(imageData==nil) { return; } 46 request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", imageDataKey: imageData!, boundary: boundary) 47 48 //myActivityIndicator.startAnimating(); 49 let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 50 data, response, error in 51 if error != nil { 52 print("error=\(error)") 53 return 54 } 55 // レスポンスを出力 56 print("******* response = \(response)") 57 let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 58 print("****** response data = \(responseString!)") 59 60 dispatch_async(dispatch_get_main_queue(),{ 61 //アップロード完了 62 }); 63 } 64 task.resume() 65 66 } 67 func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 68 let body = NSMutableData() 69 if parameters != nil { 70 for (key, value) in parameters! { 71 body.appendString("--\(boundary)\r\n") 72 body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 73 body.appendString("\(value)\r\n") 74 } 75 } 76 let filename = "user-profile.jpg" 77 let mimetype = "image/jpg" 78 body.appendString("--\(boundary)\r\n") 79 body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 80 body.appendString("Content-Type: \(mimetype)\r\n\r\n") 81 body.appendData(imageDataKey) 82 body.appendString("\r\n") 83 body.appendString("--\(boundary)--\r\n") 84 return body 85 } 86 87 func generateBoundaryString() -> String { 88 return "Boundary-\(NSUUID().UUIDString)" 89 } 90 91 //カメラで写真を取る 92 func pickImageFromCamera() { 93 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { 94 let controller = UIImagePickerController() 95 controller.delegate = self 96 controller.sourceType = UIImagePickerControllerSourceType.Camera 97 self.presentViewController(controller, animated: true, completion: nil) 98 } 99 } 100 101 //写真をライブラリから選択 102 func pickImageFromLibrary() { 103 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { 104 let controller = UIImagePickerController() 105 controller.delegate = self 106 controller.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 107 self.presentViewController(controller, animated: true, completion: nil) 108 } 109 } 110 //画像が選択されたら呼び出される 111 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 112 if info[UIImagePickerControllerOriginalImage] != nil { 113 let image = info[UIImagePickerControllerOriginalImage] as! UIImage 114 115 //iamgeForUploadというUIImageを用意しておいてそこに一旦預ける 116 self.imageForUpload = image 117 self.myImageUploadRequest() 118 } 119 picker.dismissViewControllerAnimated(true, completion: nil) 120 } 121} 122 extension NSMutableData { 123 func appendString(string: String) { 124 let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 125 appendData(data!) 126 } 127 }
以下ファイルは、/Applications/MAMP/htdocs/upload.phpとして、おいております。
php
1 2<?php 3$userId = $_POST["userId"]; 4 5//下記のディレクトリ名は好きなものでOK 6$target_dir = "/uplodafile"; 7if(!file_exists($target_dir)) 8{ 9mkdir($target_dir, 0777, true); 10} 11 $target_dir = $target_dir . "/" . basename($_FILES["file"]["name"]); 12 13if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir)) { 14echo json_encode([ 15"Message" => "The file ". basename( $_FILES["file"]["name"]). " has been uploaded.", 16"Status" => "OK", 17"userId" => $_POST["userId"] 18]); 19 20} else { 21 22echo json_encode([ 23"Message" => "Sorry, there was an error uploading your file.", 24"Status" => "Error", 25"userId" => $_POSt["userId"] 26]); 27} 28?>

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/20 07:57