Nick D
Nick D

Reputation: 23

I cant get parameters to pass with image in Alamofire 4.0 multipartform upload

I am unable to read parameters in php with a multipartform-data upload. I am using Alamofire 4 and swift 3. Below is my code:

var parameters:[String: String]
                parameters = [
            "ID": self.fieldNote.ID,
            "createdBy": self.fieldNote.createdBy,
            "workOrderID": self.fieldNote.workOrderID,
            "customerID": self.fieldNote.customerID,
            "note"      : self.fieldNote.note,
            "status":"0",
            "imageEdit":String(self.imageEdit)
        ]

    print("parameters = \(parameters)")

    Alamofire.upload(
        multipartFormData: { multipartFormData in


                for (key, value) in parameters {
                    multipartFormData.append(value.data(using: .utf8)!, withName: key)
                }
                multipartFormData.append(UIImageJPEGRepresentation(self.imageView.image!, 1)!, withName: "pic", fileName: "user.jpg", mimeType: "image/jpeg")

    },
        to: "http://www.___.com/cp/app/functions/upload.php",
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint("SUCCESS RESPONSE: \(response)")
                }
                upload.responseString { response in
                    debugPrint("SUCCESS RESPONSE: \(response)")
                }
            case .failure(let encodingError):
                print("ERROR RESPONSE: \(encodingError)")

            }
        }
    )

php:

    foreach ($_FILES as $key => $value) {
        echo "<tr>";
        echo "<td>";
        echo '$key = ' . $key;
        echo "</td>";
        echo "<td>";
        echo '$value = ' . $value;
        echo "</td>";
        echo "</tr>";
        }

Just trying to echo passed parameters before moving on with php work. Any help would be great. Thanks

Upvotes: 0

Views: 183

Answers (1)

Nick D
Nick D

Reputation: 23

I figured out working syntax.

 var parameters:[String:String]
        parameters = [
            "ID": self.fieldNote.ID,
            "createdBy": self.fieldNote.createdBy,
            "workOrderID": self.fieldNote.workOrderID,
            "customerID": self.fieldNote.customerID,
            "note"      : self.fieldNote.note,
            "status":"0",
            "imageEdit":String(self.imageEdit)
        ]


    print("parameters = \(parameters)")

    let URL = try! URLRequest(url: "http://www.___.com/cp/app/functions/upload.php", method: .post, headers: nil)

    Alamofire.upload(multipartFormData: { (multipartFormData) in
        print("alamofire upload")

        if(self.imagePicked == true || self.imageEdit == true){

            multipartFormData.append(UIImageJPEGRepresentation(self.imageView.image!, 1)!, withName: "pic", fileName: "swift_file.jpeg", mimeType: "image/jpg")
        }

        for (key, value) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
        }
    }, with: URL, encodingCompletion: { (result) in

       print("result = \(result)")
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (Progress) in
                print("Upload Progress: \(Progress.fractionCompleted)")
            })

            upload.responseJSON { response in
                print(response.request ?? "")  // original URL request
                print(response.response ?? "") // URL response
                print(response.data ?? "")     // server data
                print(response.result)   // result of response serialization
                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
            }

            upload.responseString { response in
                debugPrint("SUCCESS RESPONSE: \(response)")
            }

        case .failure(let encodingError):
            print(encodingError)
                        }
    })

php:

    $ID = intval($_POST['ID']);
    $note = $db->real_escape_string($_POST['note']);
    $customerID = intval($_POST['customerID']);
    $woID = intval($_POST['workOrderID']);
    $woItemID = intval($_POST['workOrderItemID']);
    $createdBy = intval($_POST['createdBy']);
    $status = intval($_POST['status']);

    $imageEdit = boolval($_POST['imageEdit']);

    // check $_FILES['pic'] not empty
    if(!isset($_FILES['pic']) || !is_uploaded_file($_FILES['pic']['tmp_name']))
    {
        $hasImg = false;
    } else {
        $hasImg = true;
    }

Upvotes: 1

Related Questions