【问题标题】:How to upload an image with Alamofire inside parameters如何上传带有 Alamofire 内部参数的图像
【发布时间】: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)。

标签: ios swift alamofire image-uploading


【解决方案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

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2018-02-14
    • 2017-07-14
    • 2020-07-10
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2016-10-06
    • 2017-07-25
    相关资源
    最近更新 更多