swift - 关于 Almofire 上传
问题描述
我想使用 Alamofire 将图片上传到服务器。
我已将所选照片从 imagePicker 更改为 jpegData,并将其用于 MultipartFormData 的追加。
发送通信时,应用程序的内存迅速增加,而使用 debugPrint 时,会提取大量代码。
问题是什么?
我把我的代码放在下面。
let header: HTTPHeaders = [
"Content-Type":"multipart/form-data; boundary=\(boundary)",
"access_token":"\(UserDefaults.standard.string(forKey: "token")!)"
]
AF.upload(multipartFormData: { (MultipartFormData) in
MultipartFormData.append(self.imageData, withName: "img", fileName: "img", mimeType: "img/jpeg")
MultipartFormData.append((self.titleTextField.text?.data(using: .utf8))!, withName: "content")
}, to: "https://httpbin.org/post", method: .post, headers: header).responseJSON { (result) in
debugPrint(result)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let pickedImage = info[.originalImage] as? UIImage else { return }
imageView.image = pickedImage
image = pickedImage
imageData = pickedImage.jpegData(compressionQuality: 0)
imageViewNilLbl.isHidden = true
picker.dismiss(animated: true, completion: nil)
}
解决方案
我使用了这种方法,在我的情况下一切正常。像这样试试。
public func upload(method: HTTPMethod = .post, endpoint: String, params: NSDictionary? = nil, image: UIImage) {
let url = BaseUrl.url + endpoint
AF.upload(multipartFormData: { multipartFormData in
if let params = params {
for (key, value) in params {
guard let data = "\(value)".data(using: String.Encoding.utf8) else { continue }
multipartFormData.append(data, withName: key as? String ?? "")
}
}
// Append image
attachDataToMultipart(file: image.jpegData(compressionQuality: 0.5), withName: "file", fileType: .photo, multipartFormData: multipartFormData, mimeType: .photo)
}, to: url, method: method, headers: nil).responseJSON { (result) in
debugPrint(result)
}
}
func attachDataToMultipart(file: Data?, withName: String, fileType: UploadRequestFileTypeEnum, multipartFormData: MultipartFormData, mimeType: UploadMimeTypeEnum) {
guard let data = file else { return }
let name = UUID().uuidString + fileType.rawValue
multipartFormData.append(data, withName: withName, fileName: name, mimeType: mimeType.rawValue)
}
enum UploadRequestFileTypeEnum: String {
case photo = ".jpg"
case video = ".mov"
case file = "pdf"
}
enum UploadMimeTypeEnum: String {
case photo = "image/jpg"
case video = "video/quicktime"
case file = "application/pdf"
}
推荐阅读
- mysql - SQL - 如何在 WHERE 子句中避免多个 OR 运算符?
- paypal - 贝宝智能按钮税被忽略
- firebase - Flutter - 在 null 上调用了方法“调用”
- class - 如何创建自动处理表的 Lua 方法
- python - 在python中从整个图像中检测表格部分
- keyboard-shortcuts - 使用 Karabiner-Elements 将应用程序键映射到插入符号位置的右键单击
- c - 在 C/C++ 中获取函数内部的函数地址?
- angular - Ace Editor 的 Brace 包装器中的自定义模式
- java - 更改 json 对象值
- html - 如何链接文件和文件夹,以便如果我删除一个,两个都被删除