【问题标题】:Uploading an array of image with other parameters to php from xcode将带有其他参数的图像数组从 xcode 上传到 php
【发布时间】:2017-12-19 04:16:01
【问题描述】:

我是一个初学者,我不确定如何使用 alamofire 将我的图像数组提交到我的数据库。以下是表单加载时的代码

    override func viewDidLoad()
        {
            super.viewDidLoad()

            // adding page image into the image square
            for i in 1...3
            {
                var imgView : UIImageView!
                imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
                imgView.contentMode = .scaleAspectFit
                imgView.tag = i
                imgView.image = UIImage(named: "page.png")
                imageArray.add(imgView)
            }

            videoView.isHidden = true
            photoView.type = iCarouselType.coverFlow2
            photoView.reloadData()
        }

用户选择/拍照后,图像将替换 page.png .. 一切正常。下面是替换代码

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage

        self.selectedImageView.image = chosenImage

        imageArray.replaceObject(at: self.selectedImageView.tag-1, with: self.selectedImageView)

        photoView.reloadData()

        dismiss(animated:true, completion: nil)
    }

至于提交部分,我在理解数组以及向 php/ 数据库提交数组时遇到了麻烦。请帮我说一下,因为我不知道如何从这里继续。我需要提交图片数组(最多 3 张图片)以及表单中的其他参数。

@IBAction func submitAction(_ sender: Any)
    {

            let URL_Submit = "http://localhost/form.php"
            let parameters: Parameters=[

                "block":blockText.text!,
                "category":catText.text!,
                "description":descText.text!]


            Alamofire.request(URL_Submit, method: .post, parameters: parameters).responseJSON
                {

                    response in
                    //printing response
                    print(response)

                    let alertController = UIAlertController(title: "Success!", message:
                        "Your feedback has been submitted", preferredStyle: UIAlertControllerStyle.alert)

                    alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default,handler: nil))

                    self.present(alertController, animated: true, completion: nil)

                }

           }

我删除了我在 submitAction 中上传图片的尝试,因为它不起作用。请帮我说一下,因为我现在真的不知道继续。感谢您的宝贵时间

【问题讨论】:

  • 您能告诉我,我的回答是否解决了您的问题?

标签: php arrays xcode swift3 alamofire


【解决方案1】:

您必须使用分段上传将文件上传到您的服务器,例如这里是使用alamofire 上传 4 张图片的示例。您也可以制作一个数组并上传多张图片:

func uploadImagesAndData(params:[String : AnyObject]?,image1: UIImage,image2: UIImage,image3: UIImage,image4: UIImage,success:@escaping (JSON) -> Void, failure:@escaping (Error) -> Void) {

let imageData1 = UIImageJPEGRepresentation(image1, 0.5)!
let imageData2 = UIImageJPEGRepresentation(image2, 0.5)!

let imageData3 = UIImageJPEGRepresentation(image3, 0.5)!

let imageData4 = UIImageJPEGRepresentation(image4, 0.5)!


Alamofire.upload(multipartFormData: { multipartFormData in

    for (key, value) in params! {
        if let data = value.data(using: String.Encoding.utf8.rawValue) {
            multipartFormData.append(data, withName: key)
        }
    }

    //### Here "file" is the name of your image parameter ###//

    multipartFormData.append(imageData1, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
    multipartFormData.append(imageData2, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
    multipartFormData.append(imageData3, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
    multipartFormData.append(imageData4, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")

},
                 to: K_BASEURL + K_API_LOGINDATA, encodingCompletion: { encodingResult in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload
                            .validate()
                            .responseJSON { response in
                                switch response.result {
                                case .success(let value):
                                    print("responseObject: \(value)")


                                    let resp = JSON(response.result)
                                    success(resp)
                                case .failure(let responseError):
                                    print("responseError: \(responseError)")
                                    failure(responseError)
                                }
                        }
                    case .failure(let encodingError):
                        print("encodingError: \(encodingError)")
                    }
 })
}

在您的情况下,您可以循环访问您的 array。我的后端有thumb[] 检查所以我将其命名为"thumb[]"。你可以有一个不同的名字:

  for thumbImg in thumbImagesArray {
            multipartFormData.append(UIImageJPEGRepresentation(thumbImg as! UIImage, 1)!, withName: "thumbs[]", fileName: "thumbs.jpeg", mimeType: "image/jpeg")
        }

【讨论】:

  • 我没听明白,能否请您用代码更新您的问题以及使用我的代码后遇到的所有错误?
猜你喜欢
  • 2019-08-24
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多