swift-Alamofire向服务器按参数传文件

Alamofire向服务器按参数传文件

网上很多资料都是只说怎么向服务器上传文件,而且版本也比较老,放到现在根本用不上了。有时不是单纯地传文件,是要带参数传一系列值,文件只是其中的一个。比如一个接口,需要你以键值对的形式上传3个值:key1-"aaa";key2-"bbb";key3-[图片]。其中前两个参数的值是字符类型的,第三个参数要求你传一个图片,那使用Alamofire要怎么操作呢?直接上代码:

Alamofire.upload(
         multipartFormData: { multipartFormData in
            for key in parmameters.keys{
               if key != "file"{
                  multipartFormData.append((parmameters[key] as! String).data(using: String.Encoding.utf8)!, withName: key)
               }else{
                  multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
               }
            }
      },
         to: url,
         encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
               upload.responseString { response in
                  let str = response.result.value!
                  let entity=PassportEntity(JSONString: str)
                  if entity != nil{
                     finishedCallback(entity!)
                  }else{
                     finishedCallback("failure" as AnyObject)
                  }
               }
            case .failure(let encodingError):
               finishedCallback("failure" as AnyObject)
            }
      }
      )

其中,“PassportEntity”是我的一个自定义类,你们根据自己需要写。
关键是在这个参数:

multipartFormData: { multipartFormData in
            for key in parmameters.keys{
               if key != "file"{
                  multipartFormData.append((parmameters[key] as! String).data(using: String.Encoding.utf8)!, withName: key)
               }else{
                  multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
               }
            }
      }

以表单的方式,加上键值对的形式上传参数,withName对应的值就是你的key,append()方法的第一个参数就是该key对应的值,“parmameters”是我传入的键值对的字典([String:Any]类型),我上传图片采用的是:

 multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")

传入文件路径即可,注意要在mimeType这个地方指定文件类型。

你可能感兴趣的:(swift-Alamofire向服务器按参数传文件)