【问题标题】:Image uploading with parameters using Alamofire in Swift在 Swift 中使用 Alamofire 上传带参数的图像
【发布时间】:2026-02-21 02:10:01
【问题描述】:

我正在使用 Alamofire 将我的数据发布到服务器。我有一张图片,我想用其他参数以数据形式上传到服务器。在 Alamofire 中,我使用 multipartFormData 方法发布所有参数和图像。服务器需要数据为 JSON 格式,参数如下:

 {"product_name": "almondsfdsfsdf",
 "product_price": "400",
 "product_img": image.jpg}

我正在尝试,但它给了我一个失败的回应。这是我使用 alamofire 快速执行操作的代码:

let productName = itemNameTF.text!
let productPrice = itemPriceTF.text!
let productImage:UIImage = itemImage.image!
let url = "URL"
let parameter = ["product_name": productName, "product_price": productPrice]
let headers : HTTPHeaders = ["Content-Type": "application/json","Authorization" : "Token abcd"]
Alamofire.upload(multipartFormData: {
            multipartFormData in
            if let imageData = UIImageJPEGRepresentation(productImage, 0.5){
                multipartFormData.append(imageData, withName: "image", fileName: "file.png", mimeType: "image/png")
            }

            for (key,value) in parameter {
                multipartFormData.append(value.data(using: .utf8)!, withName: key)
            }
        }, to: url,method: .post, headers: headers, encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload,_,_):
                upload.responseJSON { response in

                    print(response.request)
                    print(response.response)
                    print(response.result)
                    print(response.data)
                }
                break
            case .failure(let encodingError):
                print("error: \(encodingError)")
                break
            }
        })

我的服务器接受 BLOB 数据中的图像。如果有人可以帮助我。谢谢!

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

    尝试改变这一行:

    multipartFormData.append(imageData, withName: "image", fileName: "file.png", mimeType: "image/png")
    

    到这里:

    multipartFormData.append(imageData, withName: "product_img", fileName: "image.jpg", mimeType: "image/jpeg")
    

    【讨论】:

    • 相同的响应,即失败@chengsam
    • 没有错误,但是当我尝试打印结果时它给出了一个失败
    • 状态码为 500
    • @shahinaliagharia 你应该检查服务器的日志。
    【解决方案2】:

    请参考下面的方法来获得答案(适用于Alamofire 3.0+)。

    func uploadImageAndData(){
    
        var parameters = [String:AnyObject]()
        parameters = ["token":token,
                      "lastName":lastName]
    
        let URL = "http://yourserviceurl/"
        let image = UIImage(named: "image.png")
    
        Alamofire.upload(.POST, URL, multipartFormData: {
            multipartFormData in
    
            if let imageData = UIImageJPEGRepresentation(image, 0.6) {
                multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")
            }
    
            for (key, value) in parameters {
                multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
            }
        }, encodingCompletion: {
            encodingResult in
    
            switch encodingResult {
            case .Success(let upload, _, _):
                print("s")
                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)")
                    }
                }
            case .Failure(let encodingError):
                print(encodingError)
            }
        })
    }
    

    【讨论】:

    • 做了同样的事情
    • @shahinaliagharia 没有服务器端问题对吧?
    • 服务器没有问题
    最近更新 更多