2017-01-22 2 views
0

Ich habe versucht, ein Video auf meinem lokalen Server mit dem folgenden Upload Ansatz zu laden:Alamofire laden multipartFormData ignoriert Parameter

Alamofire.upload(
     multipartFormData: { multipartFormData in 

      multipartFormData.append(url, withName: "video", fileName: "video.mp4", mimeType: "video/mp4") 

     }, 
     with: Router.postVideo(parameters: params), 
     encodingCompletion: { encodingResult in 

      switch encodingResult 
      { 

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

        upload.uploadProgress { progress in 
         print(progress.fractionCompleted) 
        } 

        upload.responseJSON { response in 
         debugPrint(response) 
        } 

       case .failure(let encodingError): 
        print(encodingError) 

      } 

     }) 

Statt anhängt Parameter im multipartFormData Block I unter Verwendung des folgenden `Router ".

enum APIRouter: URLRequestConvertible 
{ 
    static let baseURLString = "https://base/api/" 

    case postVideo(parameters: Parameters) 

    var method: HTTPMethod 
    { 
     switch self 
     { 
      case .postVideo: 
       return .post 
      ... 
     } 
    } 

    var parameters: Parameters? 
    { 
     switch self 
     { 
      case .postVideo(let parameters): 
       return parameters 
      .... 
     } 
    } 

    var path: String 
    { 
     switch self 
     { 
      case .postVideo: 
       return “videos" 
      .... 
     } 
    } 

    public func asURLRequest() throws -> URLRequest 
    { 
     // Create url request 
     let url = try APIRouter.baseURLString.asURL() 
     var urlRequest = URLRequest(url: url.appendingPathComponent(path)) 

     // Set request method 
     urlRequest.httpMethod = method.rawValue 

     // Set parameters 
     if let params = self.parameters 
     { 
      urlRequest = try URLEncoding.default.encode(urlRequest, with: params) 
     } 

     return urlRequest 
    } 
} 

Wenn ich jedoch das Video auf den Server hochladen, fehlen die Parameter. Irgendwelche Ideen warum?

Antwort

0

Ich weiß, die Frage ist ein bisschen alt, aber ich hatte das gleiche Problem vor kurzem, und ich löste es, indem nicht das Standard-urlencoding verwenden und stattdessen einen neuen wie folgt zu schaffen:

urlencoding (Ziel: .queryString) oder URLEncoding.queryString für kurze

Dies funktioniert mit Alamofire 4.x. Ich hoffe, das hilft.

Für weitere Informationen können Sie auch this lesen.

Verwandte Themen