Reputation: 31
I am new to iOS app development. I am trying to get mimetype of image from the selected image path or image extension, but i don't know how to get it, as well as when i am appending image to multipatformdata, then i am getting an error like "Instance member 'append' cannot be used on type 'MultipartFormData'; did you mean to use a value of this type instead?". If anyone helps me in sending an image to server, it would be great. Thank in advance. I have mentioned my code below and to save filepath and filename i have taken an empty strings.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info:
if var imgUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL{
let imgName = imgUrl.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
let localPath = documentDirectory?.appending(imgName)
var image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
let data = image.pngData()! as NSData
data.write(toFile: localPath!, atomically: true)
//let imageData = NSData(contentsOfFile: localPath!)!
var photoURL = URL.init(fileURLWithPath: localPath!)//NSURL(fileURLWithPath: localPath!)
print(photoURL)
filename = photoURL.lastPathComponent
fileextension = photoURL.pathExtension // get your file extension
img.image = image
}
let APPDEL = UIApplication.shared.delegate as! AppDelegate
APPDEL.window?.rootViewController?.dismiss(animated: true, completion: nil)
}
//Button action to send the image and parameters to server
@IBAction func updatedetails(_ sender: Any) {
let imageobj = img.image!
let data = imageobj.pngData()
let acce:String = UserDefaults.standard.string(forKey: "access")!
print(acce)
let headers:HTTPHeaders = ["Authorization":"Bearer \(acce)"]
// let userData:Data = try! JSONSerialization.data(withJSONObject: postParameters)
let ImageData = imageobj.jpegData(compressionQuality: 0.5)
Alamofire.upload(multipartFormData: { (multiFormData) in
MultipartFormData.append(ImageData!, withName: photoURL, fileName: filename, mimeType: "image/jpeg")
for (key, value) in Parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "name")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "password")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "password_confirmation")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "city")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "state")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "address")
}
}, to: Constants.Userdetailsapi,method:.post,
headers:headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
print(response)
}
case .failure(let encodingError):
print(encodingError)
}
})
}
Upvotes: 0
Views: 1829
Reputation: 269
Create one class with Name of MimeTypes
And Paste below code on that file
import Foundation
internal let DEFAULT_MIME_TYPE = "application/octet-stream"
internal let mimeTypes = [
"md": "text/markdown",
"html": "text/html",
"htm": "text/html",
"shtml": "text/html",
"css": "text/css",
"xml": "text/xml",
"gif": "image/gif",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "application/javascript",
"atom": "application/atom+xml",
"rss": "application/rss+xml",
"mml": "text/mathml",
"txt": "text/plain",
"jad": "text/vnd.sun.j2me.app-descriptor",
"wml": "text/vnd.wap.wml",
"htc": "text/x-component",
"png": "image/png",
"tif": "image/tiff",
"tiff": "image/tiff",
"wbmp": "image/vnd.wap.wbmp",
"ico": "image/x-icon",
"jng": "image/x-jng",
"bmp": "image/x-ms-bmp",
"svg": "image/svg+xml",
"svgz": "image/svg+xml",
"webp": "image/webp",
"woff": "application/font-woff",
"jar": "application/java-archive",
"war": "application/java-archive",
"ear": "application/java-archive",
"json": "application/json",
"hqx": "application/mac-binhex40",
"doc": "application/msword",
"pdf": "application/pdf",
"ps": "application/postscript",
"eps": "application/postscript",
"ai": "application/postscript",
"rtf": "application/rtf",
"m3u8": "application/vnd.apple.mpegurl",
"xls": "application/vnd.ms-excel",
"eot": "application/vnd.ms-fontobject",
"ppt": "application/vnd.ms-powerpoint",
"wmlc": "application/vnd.wap.wmlc",
"kml": "application/vnd.google-earth.kml+xml",
"kmz": "application/vnd.google-earth.kmz",
"7z": "application/x-7z-compressed",
"cco": "application/x-cocoa",
"jardiff": "application/x-java-archive-diff",
"jnlp": "application/x-java-jnlp-file",
"run": "application/x-makeself",
"pl": "application/x-perl",
"pm": "application/x-perl",
"prc": "application/x-pilot",
"pdb": "application/x-pilot",
"rar": "application/x-rar-compressed",
"rpm": "application/x-redhat-package-manager",
"sea": "application/x-sea",
"swf": "application/x-shockwave-flash",
"sit": "application/x-stuffit",
"tcl": "application/x-tcl",
"tk": "application/x-tcl",
"der": "application/x-x509-ca-cert",
"pem": "application/x-x509-ca-cert",
"crt": "application/x-x509-ca-cert",
"xpi": "application/x-xpinstall",
"xhtml": "application/xhtml+xml",
"xspf": "application/xspf+xml",
"zip": "application/zip",
"bin": "application/octet-stream",
"exe": "application/octet-stream",
"dll": "application/octet-stream",
"deb": "application/octet-stream",
"dmg": "application/octet-stream",
"iso": "application/octet-stream",
"img": "application/octet-stream",
"msi": "application/octet-stream",
"msp": "application/octet-stream",
"msm": "application/octet-stream",
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"mid": "audio/midi",
"midi": "audio/midi",
"kar": "audio/midi",
"mp3": "audio/mpeg",
"ogg": "audio/ogg",
"m4a": "audio/x-m4a",
"ra": "audio/x-realaudio",
"3gpp": "video/3gpp",
"3gp": "video/3gpp",
"ts": "video/mp2t",
"mp4": "video/mp4",
"mpeg": "video/mpeg",
"mpg": "video/mpeg",
"mov": "video/quicktime",
"webm": "video/webm",
"flv": "video/x-flv",
"m4v": "video/x-m4v",
"mng": "video/x-mng",
"asx": "video/x-ms-asf",
"asf": "video/x-ms-asf",
"wmv": "video/x-ms-wmv",
"avi": "video/x-msvideo"
]
internal func MimeType(ext: String?) -> String {
let lowercase_ext: String = ext!.lowercased()
if ext != nil && mimeTypes.contains(where: { $0.0 == lowercase_ext }) {
return mimeTypes[lowercase_ext]!
}
return DEFAULT_MIME_TYPE
}
extension NSURL {
public func mimeType() -> String {
return MimeType(ext: self.pathExtension)
}
}
extension NSString {
public func mimeType() -> String {
return MimeType(ext: self.pathExtension)
}
}
extension String {
public func mimeType() -> String {
return (self as NSString).mimeType()
}
public func fileName() -> String {
return NSURL(fileURLWithPath: self).deletingPathExtension?.lastPathComponent ?? ""
}
public func fileExtension() -> String {
return NSURL(fileURLWithPath: self).pathExtension ?? ""
}
}
Now you can function like this
Alamofire.upload(multipartFormData: { (multiFormData) in
let fileName = photoURL.lastPathComponent.fileName()
let extensionName = photoURL.lastPathComponent.fileExtension()
MultipartFormData.append(ImageData!, withName: photoURL, fileName: filename, mimeType: MimeType(ext: extensionName))
for (key, value) in Parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "name")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "password")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "password_confirmation")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "city")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "state")
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: "address")
}
}, to: Constants.Userdetailsapi,method:.post,
headers:headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
print(response)
}
case .failure(let encodingError):
print(encodingError)
}
})
Upvotes: 1