2016-11-10 3 views
8

это мой код, который я хочу загрузить на сервер с помощью Alamofire, это не ошибка, но он не может нажать изображение на сервер. что мне делать ? Заранее спасибо.загрузить изображение на сервер с помощью Alamofire

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) 
      } 
     }) 

ответ

25

Try ниже код

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

Что такое 'rname' здесь? в 'let parameters = [" name ": rname]' –

+0

Не знаете, откуда взялось имя rname. Тем не менее, похоже, этот ответ очень похож на учебник [здесь] (https://www.raywenderlich.com/147086/alamofire-tutorial-getting-started-2) –

+1

@JeffMuir учебное пособие не распространяется на это – 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

Как ваш ответ был бы полезен без каких-либо объяснений? – Shashanth

+0

Просто убедитесь, что все ваши значения в параметрах являются строковыми, и это приведет к сбою. –

+0

, так что, если у меня есть имя параметра webservice, это логотип где я должен его заменить в withName: "image". или fileName: "file.jpeg" –

2

Необходимо указать name, fileName, mimeType, это важно для многих серверов

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