我正在尝试将图像上传到 PHP 服务器并且图像上传工作正常。但我也想用图像文件本身发送一些参数。请帮助我使用 Swift 2.2 / iOS 9.3 上的以下代码,了解我想如何将参数与图像文件一起添加。
我的 PHP 服务器代码如下:
$info = pathinfo($_FILES['file']['name']);
if ($info) {
$imageName = md5(uniqid(rand(), true));
$imageSize = getimagesize($_FILES['file']['tmp_name']);
if ($imageSize === FALSE) {
$newname = "default.jpg";
}
else {
$ext = $info['extension']; // get the extension of the file
$newname = $imageName.".".$ext;
}
$target = './images/'.$newname;
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target))
{
sendResponse(200, 'SUCCESS_IMAGE');
return true;
}
Swift 代码如下:
func UploadRequest()
{
let url = NSURL(string: "http://www.themostplayed.com/rest/upload.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.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(image_data!)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody = body
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}
task.resume()
}
func generateBoundaryString() -> String
{
return "Boundary-\(NSUUID().UUIDString)"
}