如何上传带有 Alamofire 内部参数的图像

Posted

技术标签:

【中文标题】如何上传带有 Alamofire 内部参数的图像【英文标题】:How to upload an image with Alamofire inside parameters 【发布时间】:2019-05-23 11:52:59 【问题描述】:

这里有很多类似的问题,但我找不到可以帮助我解决这个问题的答案。

我想要做的是上传带有参数的 Alamofire 图像 并且图像本身应该是参数的一部分。 例如参数应该是这样的:

["user_id": 1, "picture": 'and here will be the image that i want to upload']

在响应中,我将获取图像作为这样的链接:

"/uploads/members/'user_id'/images/member_'user_id'/28121284ase2.jpg"

类似的东西。

图片也应该是'jpg、png且不超过5MB'。

我是使用 API 上传图片的新手,所以我不知道该怎么做。 我尝试了在这里和谷歌可以找到的所有解决方案,但到目前为止还没有运气。任何帮助将不胜感激。

【问题讨论】:

Alamofire 之前的问题是你想上传图片的后端。您的 API 需要哪些参数?你应该打什么样的电话?要知道如何使用 Alamofire 上传,您必须事先拥有此信息。 API 的参数为 10,包括图像。 ' 姓名(字符串)、cpr(整数)、性别(整数:1 或 2)、电话(字符串)、电子邮件(字符串)、体重(整数)、身高(整数)、密码(字符串)、设备 ID(字符串)和图片(png,jpg)。呼叫将是 POST。我想将图像上传到服务器网站。该图像将在网站和应用程序中提供给用户。我没有很多关于该网站的信息,因为我只使用 ios。我希望这些信息足够。 您还需要知道您的服务器期望接收图像的内容类型和格式(例如 base64)。 【参考方案1】:

我将假设您有一个 UIImage 实例开始,您必须将其编码为 base64 并将其发送到您的后端,就像您处理任何其他 String 参数一样。这应该会有所帮助:

extension UIImage 

    func toBase64() -> String? 
        guard let imageRectoData = jpeg(.low) else 
            return nil
        
        return imageRectoData.base64EncodedString()
    

    enum JPEGQuality: CGFloat 
        case lowest  = 0
        case low     = 0.25
        case medium  = 0.5
        case high    = 0.75
        case highest = 1
    

    /// Returns the data for the specified image in JPEG format.
    /// If the image object’s underlying image data has been purged, calling this function forces that data to be reloaded into memory.
    /// - returns: A data object containing the JPEG data, or nil if there was a problem generating the data. This function may return nil if the image has no data or if the underlying CGImageRef contains data in an unsupported bitmap format.
    func jpeg(_ jpegQuality: JPEGQuality) -> Data? 
        return jpegData(compressionQuality: jpegQuality.rawValue)
    

【讨论】:

感谢您的回答。我试过这个,但我不断收到一个内部错误 'message = "Undefined index: picture"; name = "php 通知";我使用扩展来上传图片,这就是我不断得到的。 您必须与您的后端开发人员确认,他希望图像是 base64 编码的字符串。【参考方案2】:

您可以通过使用 multipart/form-data 请求来做到这一点。 您的问题与此相关:Upload image with multipart form-data iOS in Swift

【讨论】:

以上是关于如何上传带有 Alamofire 内部参数的图像的主要内容,如果未能解决你的问题,请参考以下文章

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

在 iOS 9 问题上使用 Alamofire 上传带有 URL 参数的图像

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

无法使用 alamofire 4 上传带参数的图像?

如何使用 alamofire 和数组形式的参数上传图像

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