Swift-将多个图像上传到服务器

时间:2016-05-18 07:13:56

标签: php ios swift upload uiimage

我一直试图在swift中将多个图片上传到服务器。 这是我的代码:

夫特:

 var images: Int16 = 0
 var params: NSMutableDictionary = NSMutableDictionary()
 var imageDataArray = [UIImage]()

    func syncFile() {
    let myUrl = NSURL(string: "http://localhost/app/imageUpload.php")

    let request = NSMutableURLRequest(URL: myUrl!)
    request.HTTPMethod = "POST"

    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    let authToken = prefs.valueForKey("authToken") as! String

    let boundary = generateBoundaryString()


    request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
switch images {
    case 0:
        imageDataArray = []
    case 1:
        imageDataArray.append(self.imageView1.image!)
    case 2:
        imageDataArray.append(self.imageView1.image!)
        imageDataArray.append(self.imageView2.image!)
    case 3:
        imageDataArray.append(self.imageView1.image!)
        imageDataArray.append(self.imageView2.image!)
        imageDataArray.append(self.imageView3.image!)
    default:
        break
    }


    params = [
        "auth_code"   :  "\(authToken)",
        "id"          :  "\(idParam)",
        "file"        :  imageDataArray
        ]
request.HTTPBody = createBodyWithParameters(params, filePathKey: "file", boundary: boundary)

func createBodyWithParameters(parameters: NSMutableDictionary?, filePathKey: String?, boundary: String) -> NSData {

    let body = NSMutableData()

    if parameters != nil {
        for (key, value) in parameters! {

            if(value is String || value is NSString){
                body.appendString("--\(boundary)\r\n")
                body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
                body.appendString("\(value)\r\n")
            }
            else if(value is [UIImage]){
                var i = 0
                for image in value as! [UIImage] {
                    let filename = "image\(i).png"
                    let data = UIImagePNGRepresentation(image)

                    let mimetype = mimeTypeForPath(filename)

                    let fileKey = "file"

                    body.appendString("--\(boundary)\r\n")
                    body.appendString("Content-Disposition: form-data; name=\"\(fileKey)\"; filename=\"\(filename)\"\r\n")
                    body.appendString("Content-Type: \(mimetype)\r\n\r\n")
                    body.appendData(data!)
                    body.appendString("\r\n")
                    i = i + 1
                }
            }
        }
    }
    body.appendString("--\(boundary)--\r\n")

    return body
}

func generateBoundaryString() -> String
{
    return "Boundary-\(NSUUID().UUIDString)"
}

func mimeTypeForPath(path: String) -> String {

    let pathUrl = NSURL(string: path)

    let pathExtension = pathUrl!.pathExtension
    var stringMimeType = "application/octet-stream"
    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension!, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            stringMimeType = mimetype as NSString as String
        }
    }
    return stringMimeType;
}

这是我的PHP代码:

<?php
header('Content-type: application/json');
$target_dir = "uploads";

if(!file_exists($target_dir))
{
 mkdir($target_dir, 0777, true);
}
$total = count($_FILES["file"]["name"]);
for($i=0; $i < $total; $i++){

$target_dir1 = $target_dir . "/" . basename($_FILES["file"]["name"][$i]);

if (move_uploaded_file($_FILES["file"]["tmp_name"][$i], $target_dir1)) 
{
    echo json_encode([
    "Message" => "The file ". basename( $_FILES["file"]["name"][$i]). " has been uploaded.",
    "Status" => "OK"
    ]);

} else {

    echo json_encode([
    "Message" => "Sorry, there was an error uploading your file.",
    "Status" => "Error"
    ]);

}


}
?>

但是,当我打印出响应数据时,我收到错误:{&#34;消息&#34;:&#34;抱歉,上传文件时出错。&#34;,&#34 ;状态&#34;:&#34;错误&#34;}

但是,如果我从php代码中删除循环并仅使用相同的swift代码上传1个图像,则会成功上传该图像。

0 个答案:

没有答案