使用 Alamofire Swift 3 上传图像 (Base64)

Posted

技术标签:

【中文标题】使用 Alamofire Swift 3 上传图像 (Base64)【英文标题】:Upload an image (Base64) using Alamofire Swift 3 【发布时间】:2017-03-29 18:14:22 【问题描述】:

我正在尝试使用 alamofire 通过 JSON 请求将 2 张图片上传到服务器

这是我的代码:

   let parameters = ["CreditCardImage":CreditCardImage,"CreditCardBackImage":CreditCardBackImage , "CustomerID" : CustomerID]

            let headers: HTTPHeaders = [
                "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
                "Accept": "application/json"
            ]



   Alamofire.request("MY URL", method : .post , parameters : parameters, encoding: JSONEncoding.default ,  headers: headers).responseJSON  response in

        // get json Response


        let json = JSON(response.result.value)

        print(json)


   

当我打印响应时,我在控制台中收到消息 unknown >>

我在邮递员中尝试过它也不起作用,那有什么问题?有什么帮助吗?

【问题讨论】:

【参考方案1】:

您应该使用其他Alamofire 方法。这是一个例子:

func uploadAvatar(image: UIImage) 
    Alamofire.upload(multipartFormData:  multipartFormData in
        if let imageData = UIImageJPEGRepresentation(image, 1) 
            multipartFormData.append(imageData, withName: "file", fileName: "file.png", mimeType: "image/png")
        
    , to: self.serverAddress + "/user/uploadAvatar", method: .post, headers: ["Authorization": User.shared.token], encodingCompletion:  _ in )

【讨论】:

我也在使用 multipartFormData 和 base64 吗?如果是的话,我怎么能把它作为参数发送? @Muhamméd 我认为您应该检查您的服务器端以验证它是否获取图像并执行您想要的操作。【参考方案2】:

你可以试试这个

let image = UIImage.init(named: "myImage")
 let imgData = UIImageJPEGRepresentation(image!, 0.2)!

 let parameters = ["name": rname]

Alamofire.upload(multipartFormData:  multipartFormData in
        multipartFormData.append(imgData, withName: "fileset",fileName: "file.jpg", mimeType: "image/jpg")
        for (key, value) in parameters 
                multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
            
    ,
to:"mysite/upload.php")
 (result) in
    switch result 
    case .success(let upload, _, _):

        upload.uploadProgress(closure:  (progress) in
            print("Upload Progress: \(progress.fractionCompleted)")
        )

        upload.responseJSON  response in
             print(response.result.value)  
        

    case .failure(let encodingError):
        print(encodingError)  
    

【讨论】:

以上是关于使用 Alamofire Swift 3 上传图像 (Base64)的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 在 Swift 5 中使用 Alamofire 接收图像上传

如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?

如何在swift中使用alamofire上传图库图片

如何在 Swift 4 中使用 Alamofire 上传具有其他参数的多个图像

带有参数和标题的 Alamofire Multipart-form 图像上传 - Swift

Swift Alamofire 发送图像数组和其他参数