只有图像不会在Alamofire multipart / form-data上传请求中发送

问题描述 投票:1回答:1

我有以下Alamofire请求,将一个简单的用户上传到服务器,包含电子邮件,名称和最终的头像图像等数据。

Alamofire.upload(
                multipartFormData: { multipartFormData in
                    multipartFormData.append(self.selectedEmail.data(using: .utf8)!, withName: "email")
                    multipartFormData.append( self.selectedFirstName.data(using: .utf8)!, withName: "first_name")
                    multipartFormData.append(self.selectedLastName.data(using: .utf8)!, withName: "last_name")
                    if self.selectedGender == "Male" {
                        multipartFormData.append("0".data(using: .utf8)!, withName: "gender")
                    } else {
                        multipartFormData.append("1".data(using: .utf8)!, withName: "gender")
                    }
                    let userId = String(describing: self.matchmakerModels?.filter({ m in m.email == self.selectedMatchmakerEmail})[0].id)
                    multipartFormData.append(userId.data(using: .utf8)!, withName: "user_id")
                    if let data = UIImageJPEGRepresentation(self.selectedImage, 1) {
                        multipartFormData.append(data, withName: "avatar", fileName: "avatar.jpeg", mimeType: "image/jpeg")
                    }
                },
                to: Constants.BASE_URL + Constants.API_VERSION + "single",
                method: .post,
                headers: ["Authorization": "Bearer \(oauthKey)", "Accept": "application/json"],
                encodingCompletion: { encodingResult in
                    switch encodingResult {
                        case .success(request: let upload, _, _):
                            print("===========CURL REQUEST===========")
                            debugPrint(upload)
                            upload.responseJSON { response in
                                print("===========RESPONSE=============")
                                debugPrint(response)
                                print("created single")
                                self.addSingleBtn.isEnabled = true
                            }
                        case .failure(let encodingError):
                            do {
                                print(encodingError)
                                print("failed to add single")
                            }
                    }
                }
            )

由于某种原因,代码不能像我预期的那样工作。字符串字段正确传递到后端,但图像不是。我无法访问后端,但我知道它可以正确处理邮递员请求。

邮递员请求的卷曲如下。

curl -X POST \
  http://some.net/url/to/post/the/data/model \
  -H 'accept: application/json' \
  -H 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjZjNjc0ODM1MDMzNGI1M2UyMmM0YTAyYmIxNGYwYTZlNWIxMWQ5OTE5YzVkYTQ4NTZkMDQ5YzU3MGJhYjVkNDliZjY4MGIzMGNmMjgyNmQxIn0.eyJhdWQiOiIyIiwianRpIjoiNmM2NzQ4MzUwMzM0YjUzZTIyYzRhMDJiYjE0ZjBhNmU1YjExZDk5MTljNWRhNDg1NmQwNDljNTcwYmFiNWQ0OWJmNjgwYjMwY2YyODI2ZDEiLCJpYXQiOjE1MTAwNTA3MDYsIm5iZiI6MTUxMDA1MDcwNiwiZXhwIjoxNTQxNTg2NzA2LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.k1fFhAX_JU49aqrzXZ80dL1N8LtQJMhmmfSmocwSFY7-U03S70UlCh7Ig8od9VXvOCbr95Ld-crjBOYRxOQON5aZM8gDydapKz37Ln4RhQF4GI17GOYOwkADccpdjwZQSFZzbkSMTaAWKpeYGFrPBego4DTcYPpKA08ylXEhuPgq5Dq9nK6MSOOUI9rJtiqj8dHkyWsIvuGb9y43_Qr4RSwD6VDIsfCabuqSmWHROvJXEwl-3Rpwi6rLQTPg5Lz0mEHTSMuZvpVTVLo0HOplMgO3OZUJ8GB7Km1zgUR7c8GNnveU-_BpTnsgnFOcFdLlXuki31pK-hjSJnww4vBcRDHLqw2DbqdlOmYn5Pamgq__ooIsC1nkk3j3njj6W8EGXLM_oUjXOlY5BQlV_y7F3ZzBZ7PVLV2A_apP5ufQWM-aLX5LyuKc9gyyY6eb19nRbI2ucDw_kLmO-afEpoK6sc-ZDByff_vTZjT9p1qam4WBvAcpefPJdw83yYjud89eYC82SdIRCu9rCsrXHDe3imgiX8JG1AyVxaaM4Iq-PL3DrUJle5eqY4UXYXxhWGn2aycamrXFAbQ8wU83PSJ34cqU9agrmPnYoP78tumH_q_IAN9A_owYaMKW4-v-LEPhUPIj33pet026y3Eb8C0rNp15mkwmt-wTP0IRBeuAN0M' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -H 'postman-token: e66477f1-01c3-26cc-b054-09780aab9b11' \
  -F [email protected] \
  -F first_name=Foo \
  -F last_name=Boo \
  -F gender=1 \
  -F user_id=1 \
  -F 'avatar=@[object Object]'

谁能告诉我这两个请求之间有什么不同?

编辑。这些是debugPrint(upload)debugPring(response)打印的请求和响应的调试打印输出

===========CURL REQUEST===========
$ curl -v \
    -X POST \
    -H "Content-Type: multipart/form-data; boundary=alamofire.boundary.b2cda80a0a64ceb1" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -H "Accept-Language: pl-PL;q=1.0" \
    -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImNiYThhMTE0ZTM2ZDZiN2RjMmRkNjUwYTkwNGI3MmUxZjkyM2Q4ODI0NDY1MDgxNzIyM2U2MGRiNzA3ODQ3ODdkZWY1MDFmNjhhM2IxMzA3In0.eyJhdWQiOiIyIiwianRpIjoiY2JhOGExMTRlMzZkNmI3ZGMyZGQ2NTBhOTA0YjcyZTFmOTIzZDg4MjQ0NjUwODE3MjIzZTYwZGI3MDc4NDc4N2RlZjUwMWY2OGEzYjEzMDciLCJpYXQiOjE1MTI0NTcwMjUsIm5iZiI6MTUxMjQ1NzAyNSwiZXhwIjoxNTQzOTkzMDI1LCJzdWIiOiIyIiwic2NvcGVzIjpbXX0.jSTVXMy6XFXXnD1G-Jiww4uVki6P3oQQ6vCLYfMZWQRKta0F32Kdynhr7EWn5D-n8ajujSbw5GMJgYRmZdbSOp11h_zQ7HUreali0WbX5dHbh3kPLHryjgsVgKvjeLIvmmqCjnYTxz_YHav5z6h_TrrU0v_d9SrgFtz9X3aXMT_KdzPzY5QTFhF-afOhT0kTogW-R-4WdeZiUB_xqQIjh5T2QFCAzw3EQUz4ZOX1CXILVlH48Vp5su6ltZ7I2tnp6UUtMrZGpBtlpQjf7UsfYR26lOeGQLrgs2vBUtVyHc4HjSWbNAWLrMhUvcrEAXVKMOo3sOoTcNka-00P0zqAUmmMPNWvBOkh2Gs3eVmSu4gg9OS9asE6wk-wmA_3fM2N6xMw5QIiXu8EV2U3KIrIl9dABP59x8tNB7Qlfpc_vCC9HuGjsK-nfv7rU2Mo-LSAwXZBCR6guXTL4qxxuTGSjGitrE5mofAKmihSvlmBWvWfAWNBceLLpsQOhpEesdAnvhPK2fE40jQh7EAzIxRtgoFyu0vlaO3DYy0eyjfBRepxXGT_2YPpSBA674FArTa_XgFqQv5lf__qrIU0loaoRF0RYRgfKIMYRI29zKZBK68jBsiuuRxzpnoBKoXTvcmlg3E9a2Dut4acO5P7qEHanEhGo1tA14yg9i6RtrpCaZM" \
    -H "User-Agent: ios-app/1.0 (com.coderspeak.matchmaking.ios-app; build:1; iOS 9.3.5) Alamofire/4.5.1" \
    -H "Accept: application/json" \
    "http://some.net/url/to/post/the/data/model"
===========RESPONSE=============
[Request]: POST http://some.net/url/to/post/the/data/model
[Response]: <NSHTTPURLResponse: 0x14e2c890> { URL: http://some.net/url/to/post/the/data/model } { status code: 200, headers {
    "Cache-Control" = "no-cache, private";
    Connection = "Keep-Alive";
    "Content-Length" = 762;
    "Content-Type" = "application/json";
    Date = "Fri, 15 Dec 2017 14:43:26 GMT";
    "Keep-Alive" = "timeout=5, max=100";
    Server = "Apache/2.4.18 (Ubuntu)";
    Vary = Authorization;
    "X-RateLimit-Limit" = 60;
    "X-RateLimit-Remaining" = 52;
} }
[Data]: 762 bytes
[Result]: SUCCESS: {
    single =     {
        approved = 0;
        email = Cfhgg;
        "last_name" = Gdggdgjg;
        "photo_album" =         {
            avatar = "<null>";
            "created_at" = "2017-12-15 14:43:28";
            id = 157;
            "photo_1" = "<null>";
            "photo_2" = "<null>";
            "photo_3" = "<null>";
            "updated_at" = "2017-12-15 14:43:28";
        };

    };
}

我确实从返回的json模型中删除了几行,因为它没有添加任何内容,只会使问题变得混乱。

ios swift alamofire
1个回答
1
投票

原来图像数据太大了:)需要进行更多压缩

let data = UIImageJPEGRepresentation(self.selectedImage, 0.1) 
© www.soinside.com 2019 - 2024. All rights reserved.