将 Alamofire Multipart 方法转换为以前到最新的 4.0 版本,导致多形式零件数据出现问题

Posted

技术标签:

【中文标题】将 Alamofire Multipart 方法转换为以前到最新的 4.0 版本,导致多形式零件数据出现问题【英文标题】:Converting Alamofire Multipart method to previous to latest 4.0 version , causes issue in multiform part data 【发布时间】:2017-02-13 09:26:58 【问题描述】:

我正在使用 alamofire 发布请求在 mutliform 部分中将视频发布到 youtube。使用 alamofire 以前的版本,我的代码工作正常,但在更改为更新版本并使用 Swift3.0 运行时,我收到错误

工作代码是:

let path = Bundle.main.path(forResource: "video", ofType: "mp4")
 let videodata: Data = Data.dataWithContentsOfMappedFile(path!)! as! Data

    Alamofire.upload(
        multipartFormData:  multipartFormData in
       multipartFormData.append(path, withName: "video", fileName: "video.mp4", mimeType: "application/octet-stream"),
        to: "https://www.googleapis.com/upload/youtube/v3/videos?part=id",
        encodingCompletion:  encodingResult in
            switch encodingResult 
            case .success(let upload, _, _):
                upload.responseJSON  response in
                    debugPrint(response)
                
            case .failure(let encodingError):
                print(encodingError)
            
    
    )

谁能帮我把它转换成 Alamofire 4.0.1 和 Swift 3.0 版本

我得到的错误是:Expression type () is ambiguous without more context --in this line:Alamofire.upload(

【问题讨论】:

什么是错误,发布错误日志以及导致它的行 @Tj3n 请检查错误 您的代码没有问题,您在代码中的某处缺少括号,请检查是否缺少) @Tj3n 我已经检查了所有的括号。似乎什么都没有 当我将整个 Alamofire.upload 复制到我的项目中时它工作正常 【参考方案1】:

这在 Swift 3.0 中编译:

    let path = Bundle.main.path(forResource: "video", ofType: "mp4")!
    let url = URL(string: path)!

    Alamofire.upload(multipartFormData:
       multipartFormData in
        multipartFormData.append(url, withName:  "video", fileName: "video.mp4", mimeType: "application/octet-stream")

    ,
    to: "https://www.googleapis.com/upload/youtube/v3/videos?part=id",
    encodingCompletion:
    
        encodingResult in
        switch encodingResult 
        case .success(let upload, _, _):
            upload.responseJSON  response in
                debugPrint(response)
            
        case .failure(let encodingError):
            print(encodingError)
        
    )

顺便问一下,如果你不使用它作为上传代码,你为什么要创建 videodata 对象?

【讨论】:

我通过 videodata 代替 url,multipartFormData.append(path, withName: "video", fileName: "video.mp4", mimeType: "application/octet-stream"),

以上是关于将 Alamofire Multipart 方法转换为以前到最新的 4.0 版本,导致多形式零件数据出现问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire multipart 上传图像数组

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

使用 Content-Type 发出 Alamofire 请求:multipart/form-data

如何在 Swift 中使用 Alamofire 与 Multipart 一起使用具有不同键和多种参数的多个图像

使用 alamofire 的多部分/表单数据

Alamofire 4 swift 3 上传带有标题的 MultipartFormData 未发布