1
fun UploadRequest()
{
    if (photoArray.count > 0)
    {
        for var i=0 ; i < photoArray.count; i++
        {
            print(photoArray)
            let image = (photoArray[i] as? UIImage)!
            let imageData = UIImagePNGRepresentation(image)
            if imageData != nil{
            let request = NSMutableURLRequest(URL: NSURL(string:"MY_URL")!)
            _ = NSURLSession.sharedSession()
            request.HTTPMethod = "POST"
            let boundary = NSString(format: "---------------------------14737809831466499882746641449")
            let contentType = NSString(format: "multipart/form-data; boundary=%@",boundary)
            request.addValue(contentType as String, forHTTPHeaderField: "Content-Type")
            let body = NSMutableData()
            body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
            body.appendData(NSString(format:"Content-Disposition: form-data; name=\"profile_photo\"; filename=\"(Image_Name)\"\\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
            body.appendData(NSString(format: "Content-Type: application/octet-stream\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
            body.appendData(imageData!)
            body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)

            request.HTTPBody = body

        do {
            let returnData = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil)
                    let returnString = NSString(data: returnData, encoding: NSUTF8StringEncoding)
                    print("returnString \(returnString)")
                    }
                    catch let error as NSError {
                    print(error.localizedDescription)
                                            }
            }
          task.resume()
       }
    }
}

I use this code but its not working. Given me File Location Null. Here I select images and store in array then I upload image from array. I am using .php url where i send my image.

rmaddy
  • 314,917
  • 42
  • 532
  • 579
Veer Ahir
  • 11
  • 1
  • 3

2 Answers2

0

You can use Alamofire to upload image to server only using URL

let imageData = UIPNGRepresentation(image)!

Alamofire.upload(imageData, to: "https://httpbin.org/post").responseJSON { response in
    debugPrint(response)
} 

Feel free to suggest edits to make it better.

KrishnaCA
  • 5,615
  • 1
  • 21
  • 31
  • There is one error >> Cannot invoke 'upload' with an argument list of type '(data:NSData, to: String)'. – Veer Ahir Nov 05 '16 at 07:47
0
import MobileCoreServices


func createRequest(userid: String, image: [UIImage]) throws -> NSMutableURLRequest {

   var parameters: [String : AnyObject] = [
       "userid": userid,
       "Image1": image[0],  // You need to set the UIImage Type image parameters 
       "Image2": image[1],   
       "Image3": image[2],
       "Image4": image[3]
   ]

    print(parameters)

    let boundary = generateBoundaryString()

    let url = URL(string: Your URL String)!
    let request = NSMutableURLRequest(url: url)
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    request.httpBody = try createBody(with: parameters as [String : AnyObject], boundary: boundary)

    return request
}

Here is Code of Upload Image and Parameters in multipart/form-data

func createBody(with parameters: [String: AnyObject], boundary: String) throws -> Data {

    var body = Data()

    for (key, value) in parameters {

        if(value is String || value is NSString) {
            body.append("--\(boundary)\r\n")
            body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.append("\(value)\r\n")
        }else if(value is UIImage) {
            let r = arc4random()
            let filename = "image\(r).jpg"
            let data = UIImageJPEGRepresentation(value as! UIImage,1);
            let mimetype = mimeTypeForPath(path: filename)

            body.append("--\(boundary)\r\n")
            body.append("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n")
            body.append("Content-Type: \(mimetype)\r\n\r\n")
            body.append(data!)
            body.append("\r\n")
        }

    }

    body.append("--\(boundary)--\r\n")

    return body

}

func mimeTypeForPath(path: String) -> String {
    let pathExtension = path.pathExtension
    var stringMimeType = "application/octet-stream";
    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as! CFString, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            stringMimeType = mimetype as NSString as String
        }
    }
    return stringMimeType;
}

extension String {
   var ns: NSString {
       return self as NSString
   }
   var pathExtension: String? {
       return ns.pathExtension
   }
   var lastPathComponent: String? {
       return ns.lastPathComponent
   }
}
Anit Kumar
  • 8,075
  • 1
  • 24
  • 27