如何上传带有 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 参数的图像