1. Alamofire github 地址: Alamofire
2. 终端切换到项目文件夹, 执行指令 pod init , 项目文件夹中, 打开 Podfile 文件,写入库名称
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target '测试-01-Alamofire' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for 测试-01-Alamofire
pod 'Alamofire'
end
3. 回到终端,输入指令 pod search Alamofire -> pod help -> pod install --no-repo-update, 下载完成库
4. 测试请求方法
/// 网络请求
/// - Parameters:
/// - method: GET / POST
/// - URLString: URLString
/// - parameters: 参数字典
/// - finished: 完成回调
private func request(method: HTTPMethod, URLString: String, parameters: [String: Any]?, finished: @escaping requestCallBack){
AF.request(URLString, method: method, parameters: parameters).responseJSON{ response in
switch response.result{
case let .success(data):
finished(data,nil)
break
case let .failure(error):
finished(nil,error)
break
}
}
}
5. 测试上传文件方法
///上传文件
private func upload(URLString: String, data: Data, name: String, parameters: [String: Any]?, finished: @escaping requestCallBack){
var parameter = parameters
//如果追加 token 失败,直接返回
if !appendToken(parameters: ¶meter){
// token 无效
finished(nil,NSError(domain: "cn.cast.error", code: -1001, userInfo: ["message":"token 为空"]))
return
}
/**
1. data 要上传文件的二进制
2. name 是服务器定义的字段名称 - 后台接口文档会提示
3. fileName 是保存在服务器的文件名,但是:现在通常可以随便写,后台会做一些处理
- 根据上传的文件,生成 缩略图,中等图,高清图
- 保存在不同路径,并且自动生成文件名
- fileName 是 HTTP 协议定义的属性
4. mimeType / contentType: 客户端通知服务器,二进制数据的准确类型
- 大类型 / 小类型
* image/gif image/jpg image/png
* text/plain text/html
* application/json
- 服务器不准确的类型
* application/octet-stream
*/
//TODO
// post(URLString, parameters: parameter, headers: nil, constructingBodyWith: { formData in
// formData.appendPart(withFileData: data, name: name, fileName: "test", mimeType: "application/octet-stream")
// }, progress: nil) { _, result in
// finished(result,nil)
// } failure: { _, error in
// print(error)
// finished(nil,error)
// }
//2>上传文件
AF.upload(multipartFormData: { multipartFormData in
//拼接上传文件的二进制数据
multipartFormData.append(data, withName: name, fileName: "test", mimeType: "application/octet-stream")
//遍历参数字典,生成对应的参数数据
if let parameter = parameter {
for (k, v) in parameter {
let str = v as! String
let strData = str.data(using: .utf8)!
// data 是 v 的二进制数据 name 是 K
multipartFormData.append(strData, withName: k)
}
}
}, to: URLString)
.responseJSON { response in
print(response.result)
switch response.result{
case let .success(data):
//完成回调
finished(data,nil)
break
case let .failure(error):
//在开发网络应用中的时候,错误不要提示给用户,但是错误一定要输出
print(error)
finished(nil,error)
break
}
}
}