Alamofire上传multipartFormData忽略参数

Posted

技术标签:

【中文标题】Alamofire上传multipartFormData忽略参数【英文标题】:Alamofire upload multipartFormData ignores parameters 【发布时间】:2017-01-22 22:35:39 【问题描述】:

我一直在尝试使用以下上传方法将视频上传到我的本地服务器:

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)

            

        )

我没有在 multipartFormData 块中附加参数,而是使用以下 `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
    

但是,当我将视频上传到服务器时,缺少参数。任何想法为什么?

【问题讨论】:

【参考方案1】:

我知道这个问题有点老了,但我最近遇到了同样的问题,我通过不使用默认的 URLEncoding 而是创建一个这样的新问题来解决它:

URLEncoding(目的地:.queryString) 或者 URLEncoding.queryString 简称

这适用于 Alamofire 4.x。 我希望这会有所帮助。

更多信息你也可以阅读this。

【讨论】:

以上是关于Alamofire上传multipartFormData忽略参数的主要内容,如果未能解决你的问题,请参考以下文章

获取分段上传 Alamofire 5 的上传进度

Alamofire:取消(暂停)文件上传

如何在 alamofire 中同步上传图片?

Alamofire 上传进度

在 iOS 中使用 Alamofire 上传图像

Alamofire上传multipartFormData忽略参数