簡體   English   中英

使用其他參數上傳Alamofire 4和Swift 3 Image

[英]Alamofire 4 and Swift 3 Image upload with other parameters

我正在嘗試上傳帶有其他參數的圖像,當我的一個參數的數據類型為[String]時,會出現問題。 服務器端的數組將為空。:/使用其他數據類型,一切正常。

  self.manager.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(imgData, withName: imgKey, fileName: "image.jpg", mimeType: "image/jpg")

                for (key, value) in params {
                    multipartFormData.append(serialize(value)!, withName: key)
                }

            },
            to: path,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        debugPrint("SUCCESS RESPONSE: \(response)")
                    }
                case .failure(let encodingError):
                    print("ERROR RESPONSE: \(encodingError)")

                }
            }
        )

func serialize(_ value: Any) -> Data? {
        if JSONSerialization.isValidJSONObject(value) {
            return try? JSONSerialization.data(withJSONObject: value, options: [])
        }
        else {
            return String(describing: value).data(using: .utf8)
        }
    }

我的參數是[String: Any]

我做錯了什么? :(

問題肯定在客戶端。 當我使用Postman或其他HTTP服務時,一切正常

Alamofire.upload(multipartFormData: { multipartFormData in
    var index = 1
    for image in imageArray {
        let imageData: Data = (UIImageJPEGRepresentation(image, 1.0) as Data?)!

        multipartFormData.append(imageData, withName: "home-\(index)", fileName: "home-\(index)", mimeType: "image/jpeg")

        index += 1
    }
    }, with: requestName, encodingCompletion: { result in
        switch result {
        case .success(let upload, _, _):

            upload.responseJSON { response in
                print("Image(s) Uploaded successfully:\(response)")
            }
        case .failure(let encodingError):
            print("encodingError:\(encodingError)")
        }
})

我知道問題指南說不要求澄清,但我還沒有足夠的代表發表評論。

你是如何訪問服務器上的陣列的? 你是如何使用其他服務發送陣列的?

更重要的是,看起來params[String:String] 你如何為它添加[String]值? 你在序列化嗎?

我使用這段代碼上傳了我想要的圖片和參數,我希望它有所幫助

Alamofire.upload(multipartFormData: { (MultipartFormData) in
            var secondCounter = 0
            for data in imageDataArray {
                print(imageNamesArray[secondCounter])
                MultipartFormData.append(data, withName: imageNamesArray[secondCounter], fileName: imageNamesArray[secondCounter] + "myImage.png", mimeType: "application/octed-stream")
                secondCounter = secondCounter + 1
            }
            contentDict = parameters as! [String : String]
            for (key, value) in contentDict {
                MultipartFormData.append(value.data(using: .utf8)!, withName: key)
            }
            }, to: url, method: .post, headers: nil, encodingCompletion: { (result) in
                switch result {
                case .success(let upload, _, _):
                    upload.responseJSON(completionHandler: { (dataResponse) in
                        if dataResponse.result.error != nil {
                            completion(nil, nil, dataResponse.result.error as? NSError, false)
                        }
                        else {
                            print(dataResponse.result.value)
                            completion(nil, nil, nil, true)
                        }
                    })
                case .failure(let encodingError):
                    print(encodingError)
                    completion(nil, nil, nil, false)
                }

忽略打印​​Lol

這對我來說是正確的。 當您使用MultipartFormData上傳需要查看RFC 2388的文件時,解決方案非常簡單。 要上傳數組,您需要這種格式非常重要。 例如,如果要上傳字符串數組,則需要在鍵中包含括號!

Value: "234234"  Key: keyname[]

您需要一次又一次地將數據附加到循環中。

例如,使用Alamofire查看這個快速代碼。

for (key, value) in params {
            if JSONSerialization.isValidJSONObject(value) {
                let array = value as! [String]

                for string in array {
                    if let stringData = string.data(using: .utf8) {
                        multipartFormData.append(stringData, withName: key+"[]")
                    }
                }

            } else {
                multipartFormData.append(String(describing: value).data(using: .utf8)!, withName: key)
            }
        }

如果變量是有效的JSONObject,我將數據附加到我的數組。 再次,不要忘記在關鍵字中加入[]括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM