【问题标题】:Parameter missing error on image upload swift图片上传swift时参数丢失错误
【发布时间】:2016-04-11 10:31:06
【问题描述】:

我正在尝试将带有一些详细信息的图像上传到服务器,但我不断收到来自服务器的参数丢失错误。这是我的图片上传代码

 func uploadImages(imageData: NSData, withParams requestDict:NSDictionary, callBack:(responseDict: NSDictionary?, error: NSError?) -> ())
    {

        print(requestDict)            
        let boundary = generateBoundaryString()

        let url:NSURL = NSURL(string: String(format: "%@%@", BASE_URL, IMAGE_UPLOAD_API))!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.timeoutInterval          = FLOAT_CONSTANT_60
        request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

         request.HTTPBody = createBodyWithParameters(requestDict as? [String : String], filePathKey: "image", imageData: imageData, boundary: boundary)

        print(requestDict)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) in
            do {
                let JSON = try! NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.AllowFragments)
                guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
                    print("Not a Dictionary")
                    //get your JSONData here from dictionary.

                    return
                }
                callBack(responseDict: JSON as? NSDictionary, error: nil)
                print("JSONDictionary! \(JSONDictionary)")

            }
            catch let JSONError as NSError {
                print("\(JSONError)")
                callBack(responseDict: nil, error: JSONError)

            }

        })

     }


    func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageData: NSData, boundary: String) -> NSData {
        let body = NSMutableData()

        if parameters != nil {
            for (key, value) in parameters! {
                body.appendString("--\(boundary)\r\n")
                body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
                body.appendString("\(value)\r\n")
            }
        }

        let filename = "MyImage.jpg"

        let mimetype = "image/jpg"

        body.appendString("--\(boundary)\r\n")
        body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
        body.appendString("Content-Type: \(mimetype)\r\n\r\n")
        body.appendData(imageData)
        body.appendString("\r\n")

        body.appendString("--\(boundary)--\r\n")

        return body

    }

    /// Create boundary string for multipart/form-data request
    func generateBoundaryString() -> String {
        return "Boundary-\(NSUUID().UUIDString)"
    }

这是我的服务器 api 格式

"{
'deviceId' : 1234567,
'role' : 'admin',
'authToken' : 'cf01ebcd5844fde166940b06fbb267ba',
'userId' : 90490,
'appointmentId': 25067187,
'position' : 2,
'image' : ''
}"

这就是在 uploadImages 方法中打印响应的内容

{
    appointmentId = 25067187;
    authToken = b72e4d89aa53399dd3a04f1440dec704;
    deviceId = "4DF3R180-55XC-4G3C-90F8-3431537ECCAF";
    position = 2;
    role = admin;
    userId = 90490;
}

我相信图像参数是 filePathKey 字符串并附加在请求中,但我无法在附加图像后打印它以查看请求。由于未添加图像参数,我做错了什么吗?

编辑

这就是我调用方法的方式

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){

        dispatch_async(dispatch_get_main_queue(),{
            let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
            let imageData = UIImageJPEGRepresentation(selectedImage!, 1)

            let apiHandler = APIHandler()

            apiHandler.uploadImages(imageData!, withParams: self.createImageUploadDict(), callBack: { (responseDict, error) -> () in
                print(responseDict)


            })

        })
        self.dismissViewControllerAnimated(true, completion: nil)
    }

【问题讨论】:

  • 你从来没有告诉我们imageData是如何生成的。它是否正确编码?此外,这很可能是您正在使用的 API 特有的问题,而您没有告诉我们那是什么。很难提供帮助。
  • 我正在使用 imagepickerconroller,我已经更新了代码。您可以检查此代码是否与任何其他 api 一起使用吗?
  • 不,这是你的工作:)

标签: ios swift2 image-uploading multipartform-data image-upload


【解决方案1】:

我发现了问题,代码没有任何问题,在创建请求字典时我实际上使用了 [String: AnyObject] 但在这里我使用了 [String:String] 所以我得到了参数丢失错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2019-03-16
    相关资源
    最近更新 更多