2016-11-03 12 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

マルチパート/フォームのデータです。 https://github.com/Alamofire/Alamofire – KrishnaCA

+0

私は既にAlamofireを試しましたが、すべてのソリューションで私は持っていないAPI Keyを使用する必要があるため、何も得られません。そこに画像をアップロードするためのURLしかありません。 Alamofireでサーバー上の画像をアップロードするためにURLを使用することだけが可能ですか? @KrishnaChaitanyaAmjuri –

+0

可能です。私の答えをチェックしてください。動作しない場合はお知らせください – KrishnaCA

答えて

0

あなただけのURL

let imageData = UIPNGRepresentation(image)! 

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

それを改善するために、編集内容を提案すること自由に感じを使用してサーバーに画像をアップロードするAlamofireを使用することができます。ここで

+0

エラーが1つあります>>引数リスト '(data:NSData、to:String)'を使用して 'upload'を呼び出すことはできません。 –

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 
} 

画像をアップロードのコードとパラメータは、それが画像をアップロードするために `Alamofire`のようなサードパーティのライブラリを使用することをお勧めします

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 
    } 
} 
関連する問題