Alamofire通过.POST上传到PHP。上传的文件在哪里?

时间:2015-06-03 16:30:37

标签: php swift post alamofire

我使用.upload方法上传到我服务器上的php文件,它似乎工作(我得到200响应)

upload(.POST, Config.uploadArbeitsauftragURL, urlToFile!)

如何在PHP文件中访问此文件? 当我想使用$_FILE时,我需要一个相应数组索引的描述符,我无法指定任何。

2 个答案:

答案 0 :(得分:2)

今天我在遇到原型时遇到了同样的问题。我稍微讨厌的解决方案

迅速

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);

解释

似乎Alamofire将文件作为八位字节流发送,因此只需POST原始文件数据。我们可以从php://输入中获取此信息但我们没有获取文件名。所以hacky解决方案是只在查询字符串中发送文件名。

请记住,这不是"对"办法。但它现在是一个快速修复

答案 1 :(得分:0)

我知道,但我遇到了同样的问题。一切看起来不错,但我无法从我的服务器应用程序访问文件数据。通过使用那里描述的方法(多部分文件上传),我能够上传文件。此外,该方法允许您上传多个文件或使用请求发送其他参数。