ios – 在Swift中使用其他参数上传多个图像

前端之家收集整理的这篇文章主要介绍了ios – 在Swift中使用其他参数上传多个图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在,我一直只通过下面给出的代码将一个图像上传到服务器端脚本的服务器上.现在我有一个UI Image数组,我想知道如何使用UIImageJPEGRepresentation(myImageView.image!,0.1)将所有图像发布到UIImageView数组中?
  1. func uploadImage()
  2. {
  3. let postPictureUrl = NSURL(string: "http://www.23look.com/merchant/verify")
  4. let request = NSMutableURLRequest(URL: postPictureUrl!)
  5. request.HTTPMethod="POST"
  6.  
  7. let param=[
  8. "mer_name" : shopNameUITF.text!,"mer_tel" : shopTelephoneUITF.text!,"mer_address" : shopAddressUITF.text!,"lat" : "39.6892","lng" : "115.9239","token": KeychainWrapper.stringForKey("tokenValue")!,"mer_type": "smalll"
  9. ]
  10.  
  11. let abc = KeychainWrapper.stringForKey("tokenValue")!
  12.  
  13. let boundary = generateBoundaryString()
  14.  
  15. request.setValue("multipart/form-data; boundary=\(boundary)",forHTTPHeaderField: "Content-Type")
  16.  
  17. let imageData = UIImageJPEGRepresentation(myImageView.image!,0.1)
  18.  
  19. if imageData==nil { print("image data is nil"); return }
  20.  
  21. request.HTTPBody = createBodyWithParameters(param,filePathKey: "mer_license",imageDataKey: imageData!,boundary: boundary)
  22.  
  23. let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
  24. data,response,error in
  25.  
  26. if error != nil {
  27. print("error=\(error)")
  28. return
  29. }
  30.  
  31. //You can print out response object
  32. print("***** response = \(response)")
  33.  
  34. // Print out reponse body
  35. let responseString = NSString(data: data!,encoding: NSUTF8StringEncoding)
  36. print("**** response data = \(responseString!)")
  37.  
  38. do {
  39.  
  40. let json = try NSJSONSerialization.JSONObjectWithData(data!,options: .MutableContainers) as? NSDictionary
  41.  
  42. dispatch_async(dispatch_get_main_queue(),{
  43. print(NSString(data: data!,encoding:NSUTF8StringEncoding)!)
  44. print(json)
  45. })
  46.  
  47. } catch let err {
  48. print(err)
  49. }
  50. }
  51. task.resume()
  52. }
  53.  
  54. func generateBoundaryString() -> String {
  55. return "Boundary-\(NSUUID().UUIDString)"
  56. }
  57.  
  58. func createBodyWithParameters(parameters:[String:String]?,filePathKey: String?,imageDataKey:NSData,boundary: String) -> NSData {
  59.  
  60. var body=NSMutableData()
  61.  
  62. if parameters != nil {
  63. for(key,value) in parameters! {
  64. body.appendString("--\(boundary)\r\n")
  65. body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
  66. body.appendString("\(value)\r\n")
  67. }
  68. }
  69.  
  70. let filename = "user-profile.jpg"
  71. let mimetype = "image/jpg"
  72.  
  73. body.appendString("--\(boundary)\r\n")
  74. body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
  75. body.appendString("Content Type: \(mimetype)\r\n\r\n")
  76. body.appendData(imageDataKey)
  77. body.appendString("\r\n")
  78.  
  79. body.appendString("-\(boundary)-\r\n")
  80.  
  81. return body
  82. }

它需要以下参数:

mer_name – 字符串

mer_tel – 字符串

mer_address – 字符串

lng – 字符串

lat – string

mer_licence – 文件类型(这是我的图片上传的地方)

token – 字符串

mer_type – 字符串

解决方法

您应该在createBodyWithParameters中进行更改,如下所示………

当你有多个图像时……

  1. func createBodyWithParameters(parameters: NSMutableDictionary?,boundary: String) -> NSData {
  2. let body = NSMutableData()
  3.  
  4. if parameters != nil {
  5. for (key,value) in parameters! {
  6.  
  7. if(value is String || value is NSString){
  8. body.appendString("--\(boundary)\r\n")
  9. body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
  10. body.appendString("\(value)\r\n")
  11. }
  12. else if(value is [UIImage]){
  13. var i = 0;
  14. for image in value as! [UIImage]{
  15. let filename = "image\(i).jpg"
  16. let data = UIImageJPEGRepresentation(image,1);
  17. let mimetype = mimeTypeForPath(filename)
  18.  
  19. body.appendString("--\(boundary)\r\n")
  20. body.appendString("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n")
  21. body.appendString("Content-Type: \(mimetype)\r\n\r\n")
  22. body.appendData(data!)
  23. body.appendString("\r\n")
  24. i++;
  25. }
  26.  
  27.  
  28. }
  29. }
  30. }
  31. body.appendString("--\(boundary)--\r\n")
  32. // NSLog("data %@",NSString(data: body,encoding: NSUTF8StringEncoding)!);
  33. return body
  34. }
  35.  
  36. func generateBoundaryString() -> String {
  37. return "Boundary-\(NSUUID().UUIDString)"
  38.  
  39. }
  40.  
  41. func mimeTypeForPath(path: String) -> String {
  42. let pathExtension = path.pathExtension
  43. var stringMimeType = "application/octet-stream";
  44. if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,pathExtension!,nil)?.takeRetainedValue() {
  45. if let mimetype = UTTypeCopyPreferredTagWithClass(uti,kUTTagClassMIMEType)?.takeRetainedValue() {
  46. stringMimeType = mimetype as NSString as String
  47. }
  48. }
  49. return stringMimeType;
  50. }
  51.  
  52.  
  53.  
  54. func createRequest (param : NSMutableDictionary,strURL : String) -> NSURLRequest {
  55.  
  56. let boundary = generateBoundaryString()
  57.  
  58. let url = NSURL(string: strURL)
  59. let request = NSMutableURLRequest(URL: url!)
  60.  
  61. request.setValue("multipart/form-data; boundary=\(boundary)",forHTTPHeaderField: "Content-Type")
  62. request.HTTPMethod = "POST"
  63. request.HTTPBody = createBodyWithParameters(param,boundary: boundary)
  64.  
  65. return request
  66. }

猜你在找的iOS相关文章