斯威夫特3上传图像到PHP失败
问题描述:
上传图像失败 我邮寄图像到PHP斯威夫特3上传图像到PHP失败
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"]; }
答
你的第二个屏幕截图显示问题: 这是带有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")) { ...
它不是在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
您现在将图像直接保存到您的htdocs/Applications/XAMPP/xamppfiles/htdocs /请尝试以下操作: –
对不起,我在这里插入了全部评论: 您现在将映像直接保存到您的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”)) –