2016-09-21 37 views
0

上傳圖像失敗 我郵寄圖像到PHP斯威夫特3上傳圖像到PHP失敗

enter image description here

enter image description here

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

@IBOutlet var image: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

@IBAction func selectPicture(_ sender: AnyObject) { 

    let ImagePicker = UIImagePickerController() 
    ImagePicker.delegate = self 
    ImagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary 

    self.present(ImagePicker, animated: true, completion: nil)  
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    image.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    self.dismiss(animated: true, completion: nil) 
} 

@IBAction func upload_request(_ sender: AnyObject) { 
    UploadRequest() 
} 

func UploadRequest() 
{ 
    let url = URL(string: "http://127.0.0.1/imgJSON/img.php") 

    let request = NSMutableURLRequest(url: url!) 
    request.httpMethod = "POST" 

    let boundary = generateBoundaryString()   

    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 

    if (image.image == nil) 
    { 
     return 
    } 

    let image_data = UIImagePNGRepresentation(image.image!) 

    if(image_data == nil) 
    { 
     return 
    } 

    let body = NSMutableData() 

    let fname = "test.png" 
    let mimetype = "image/png" 

    body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!) 
    body.append("Content-Disposition:form-data; name=\"test\"\r\n\r\n".data(using: String.Encoding.utf8)!) 
    body.append("hi\r\n".data(using: String.Encoding.utf8)!) 

    body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!) 
    body.append("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".data(using: String.Encoding.utf8)!) 
    body.append("Content-Type: \(mimetype)\r\n\r\n".data(using: String.Encoding.utf8)!) 
    body.append(image_data!) 
    body.append("\r\n".data(using: String.Encoding.utf8)!) 

    body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!) 

    request.httpBody = body as Data   
    let session = URLSession.shared 

    let task = URLSession.shared.dataTask(with: request as URLRequest) {   (
     data, response, error) in 

     guard let _:Data = data, let _:URLResponse = response , error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 

     print(dataString)    
    } 
    task.resume()  
}  

func generateBoundaryString() -> String 
{ 
    return "Boundary-\(UUID().uuidString)" 
} 

在PHP

if (move_uploaded_file($_FILES['file']['tmp_name'], "image.png")) { 
echo "File uploaded: ".$_FILES["file"]["name"]; } 

回答

0

你的第二個屏幕截圖顯示問題: 這是帶有PHP警告的服務器回覆,apache/php用戶沒有權限將上傳的圖像移動到targetdirectory中,這將成爲根目錄(/) - 因爲您沒有指定目錄/路徑在哪裏存儲圖像。請參閱PHP文檔的Example 1

所以,你應該建立一個上傳目錄(如MKDIR /Appli.../htdocs/uploads,設置正確的權限(用於開發目的搭配chmod -R 777個上傳),並在你的PHP目標目錄指定:

if (move_uploaded_file($_FILES['file']['tmp_name'], "/Appli.../htdocs/uploads/image.png")) { ... 
+0

它不是在PHP工作 如果(move_uploaded_file($ _ FILES [ '文件'] [ 'tmp_name的值'], 「/Applications/XAMPP/xamppfiles/htdocs/image.png」)){ echo「File uploaded:」。$ _ FILES [「file」] [「name」]; \t } 我運行應用程序,但顯示 https://www.dropbox.com/s/gd87ym4yfr0lao3/%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%A0%E0%B8 %B2%E0%B8%9E%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%88%E0%B8%AD%202559-09-21 %20%E0%B9%80%E0%B8%A7%E0%B8%A5%E0%B8%B2%2017.14.01.png?dl = 0 – user3592917

+0

您現在將圖像直接保存到您的htdocs/Applications/XAMPP/xamppfiles/htdocs /請嘗試以下操作: –

+0

對不起,我在這裏插入了全部評論: 您現在將映像直接保存到您的htdocs文件夾:/ Applications/XAMPP/xamppfiles/htdocs,請在* * terminal **: mkdir/Applications/XAMPP/xamppfiles/htdocs/uploads && chmod -R 777/Applications/XAMPP/xamppfiles/htdocs/uploads 然後在** PHP **上使用: if(move_uploaded_file($ _ FILES ['file'] ['tmp_name'],「/Applications/XAMPP/xamppfiles/htdocs/uploads/image.png」)) –