2016-11-10 3 views
8

Dies ist mein Code, den ich Bild auf Server mit Alamofire hochladen möchte, es ist kein Fehler, aber es kann nicht Bild zum Server schieben. was soll ich machen ? Danke im Voraus. Bild auf Server mit Alamofire hochladen

let url = URL(string: urlString)! 
    var urlRequest = URLRequest(url: url) 
    urlRequest.httpMethod = "POST" 

    let parameters = ["name": rname] 

    do { 
     urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: []) 
    } catch { 
     print(error) 
    } 

    urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     let image = UIImage.init(named: "myImage") 
     let imgData = UIImageJPEGRepresentation(image!, 0.2)! 


    Alamofire.upload(multipartFormData: { MultipartFormData in 

      MultipartFormData.append(imgData, withName: "fileset", fileName: "name", mimeType: "image/jpg") 


     },with: urlRequest,encodingCompletion: { encodingResult in 

      switch encodingResult { 

      case .success(let upload, _, _): 

       upload.responseJSON { response in 

        if let info = response.result.value as? Dictionary<String, AnyObject> { 

         if let links = info["links"] as? Dictionary<String, AnyObject> { 

          if let imgLink = links["image_link"] as? String { 
           print("LINK: \(imgLink)") 
          } 
         } 
        } 

       } case .failure(let error): 
        print(error) 
      } 
     }) 

Antwort

25

Try Code unten

let image = UIImage.init(named: "myImage") 
let imgData = UIImageJPEGRepresentation(image!, 0.2)! 

let parameters = ["name": rname] 

Alamofire.upload(multipartFormData: { multipartFormData in 
     multipartFormData.append(imgData, withName: "fileset",fileName: "file.jpg", mimeType: "image/jpg") 
     for (key, value) in parameters { 
       multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) 
      } 
    }, 
to:"mysite/upload.php") 
{ (result) in 
    switch result { 
    case .success(let upload, _, _): 

     upload.uploadProgress(closure: { (progress) in 
      print("Upload Progress: \(progress.fractionCompleted)") 
     }) 

     upload.responseJSON { response in 
      print(response.result.value) 
     } 

    case .failure(let encodingError): 
     print(encodingError) 
    } 
} 
+1

Was ist 'rname' hier? in 'let parameters = [" name ": rname]' –

+0

Nicht sicher, woher rname kam. Es scheint jedoch, diese Antwort ist sehr ähnlich zu einem Tutorial [hier] (https://www.raywenderlich.com/147086/alamofire-tutorial-getting-started-2) –

+1

@ JeffMuir das Tutorial deckt dies nicht – iosMentalist

5
let params: Parameters = ["name": "abcd" "gender": "Male"] 
Alamofire.upload(multipartFormData: 
    { 
     (multipartFormData) in 
     multipartFormData.append(UIImageJPEGRepresentation(self.yourimageView.image!, 0.1)!, withName: "image", fileName: "file.jpeg", mimeType: "image/jpeg") 
     for (key, value) in params 
     { 
      multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key) 
     } 
}, to:yourUrl,headers:nil) 
{ (result) in 
    switch result { 
    case .success(let upload,_,_): 
     upload.uploadProgress(closure: { (progress) in 
      //Print progress 
     }) 
     upload.responseJSON 
      { response in 
       //print response.result 
       if response.result.value != nil 
       { 
        let dict :NSDictionary = response.result.value! as! NSDictionary 
        let status = dict.value(forKey: "status")as! String 
        if status=="1" 
        { 
         print("DATA UPLOAD SUCCESSFULLY") 
        } 
       } 
     }     
    case .failure(let encodingError): 
     break 
    } 
} 
+0

Wie wäre Ihre Antwort ohne jede Erklärung nützlich? – Shashanth

+0

Stellen Sie nur sicher, dass alle Werte in den Parametern string sind, sonst wird es zu einem Absturz kommen. –

+0

Also, wenn ich den Parameternamen des Webservice habe, ist das Logo wo sollte ich ersetzen in withName: "image". oder fileName: "file.jpeg" –

2

benötigen name, fileName, mimeType angeben, diese sind wichtig für viele Server

func upload(image: UIImage, completion: (URL?) -> Void) { 
    guard let data = UIImageJPEGRepresentation(image, 0.9) else { 
     return 
    } 

    Alamofire.upload(multipartFormData: { (form) in 
     form.append(data, withName: "file", fileName: "file.jpg", mimeType: "image/jpg") 
    }, to: "https://yourawesomebackend.com", encodingCompletion: { result in 
     switch result { 
     case .success(let upload, _, _): 
     upload.responseString { response in 
      print(response.value) 
     } 
     case .failure(let encodingError): 
     print(encodingError) 
     } 
    }) 
    } 
Verwandte Themen