2016-11-03 2 views
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() 
     } 
    } 
} 

Я использую этот код, но его не работает. Мне дано Местоположение файла Null. Здесь я выбираю изображения и сохраняю в массиве, а затем загружаю изображение из массива. Я использую .php url, где я отправляю свое изображение.Как загрузить несколько изображений на сервер с помощью Swift?

+0

Это лучше использовать библиотеку третьей стороны, как 'Alamofire' для загрузки изображений. https://github.com/Alamofire/Alamofire – KrishnaCA

+0

Я уже пробовал Alamofire, но ничего не получаю, потому что в каждом решении мне нужно использовать API-ключ, которого у меня нет. У меня есть только URL для загрузки изображения. Возможно ли использование URL для загрузки изображения на сервере в Alamofire ??? @KrishnaChaitanyaAmjuri –

+0

Это возможно. Пожалуйста, проверьте мой ответ. Пожалуйста, дайте мне знать, если он не работает. – KrishnaCA

ответ

0

Вы можете использовать Alamofire загрузить изображение на сервер только с помощью URL

let imageData = UIPNGRepresentation(image)! 

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

Не стесняйтесь предлагать изменения, чтобы сделать его лучше.

+0

Существует одна ошибка >> Невозможно вызвать 'upload' с помощью списка аргументов типа '(data: NSData, to: String)'. –

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 
} 

Здесь Код Загрузить изображения и параметров в многочастных/form-данных

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 
    } 
} 
Смежные вопросы