I have a problem trying to upload an image in swift to a PHP server. Everything looks good till the php processes the file. In that moment I get the error.
The relevant part of the swift code is:
func myImageUploadRequest(image: UIImage, realfilename: String)
{
let myUrl = NSURL(string: "http://www.ignistudios.com/boda/postImage.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let param = [
"firstName" : "username",
"lastName" : "lastname",
"userId" : "9"
]
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let imageData = UIImageJPEGRepresentation(image, 1)
print(imageData.debugDescription)
if(imageData==nil) { return; }
request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", realfilename: realfilename, imageDataKey: imageData!, boundary: boundary)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
// You can print out response object
print("******* response = \(response)")
// Print out reponse body
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("****** response data = \(responseString!)")
}
task.resume()
}
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, realfilename: String?, imageDataKey: NSData, boundary: String) -> NSData {
var body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
body.appendString("--\(boundary)
")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"
")
body.appendString("\(value)
")
}
}
let filename = realfilename
let mimetype = "image/jpg"
body.appendString("--\(boundary)
")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"
")
body.appendString("Content-Type: \(mimetype)
")
body.appendData(imageDataKey)
body.appendString("
")
body.appendString("--\(boundary)--
")
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().UUIDString)"
}
And the php is
<?php
$uploaddir = '/fotos/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo "<p>";
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.
";
} else {
echo "Upload failed";
}
echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
And last, the error I get is:
****** response data =
Upload failed
Here is some more debugging info:Array ( [file] => Array ( [name] => Optional(\"boda20160428_135709.jpg\") [type] => [tmp_name] => [error] => 1 [size] => 0 ))
Any tip would be very much appreciated.