I came across this same problem today while prototyping something. My slightly hacky solution
swift
let fileName = "myImage.png"
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let filePath = documentsPath.stringByAppendingPathComponent(fileName)
let fileURL = NSURL(fileURLWithPath: filePath)!
Alamofire.upload(.POST, "http://example.com/upload.php?fileName=\(fileName)", fileURL)
upload.php
// get the file data
$fileData = file_get_contents('php://input');
// sanitize filename
$fileName = preg_replace("([^\w\s\d\-_~,;:\[\]\(\).])", '', $_GET["fileName"]);
// save to disk
file_put_contents($fileName, $fileData);
explanation
It seems Alamofire is sending the file as a octet-stream, so just POSTing the raw file data. We can grab this from php://input but we don't get a filename. So the hacky solution is to just send the filename in the query string.
Remember, this isn't the "right" way. But it's a quick fix for now