get和post请求的区别
1,post请求 请求地址和参数分离,比get更安全
2,get请求能上传数据不能上传文件,而post两者都可以
3,get请求在浏览器中的字符串长度最大限制为1024,post没有限制
4,post上传文件 文件大小的限制是由后台设置的
下面是一个登录、上传头像、调用相册的简单功能,来帮助理解post的功能
【AFN POST用法】
let manager = AFHTTPSessionManager()
//设置响应的数据类型为NSData,如果不设置可能会自动解析成字典或数组
manager.responseSerializer = AFHTTPResponseSerializer()
//af设置请求头的方法
//sessionManager.requestSerializer = AFHTTPRequestSerializer()
//sessionManager.requestSerializer.setValue("", forHTTPHeaderField: "")
// af执行post
//如果需要上传文件,就用带constructingBodyWithBlock的方法
//如果不需要上传文件,就选不带constructingBodyWithBlock的方法
//constructingBodyWithBlock里设置需要上传的文件
//parameters为网络请求的参数,需要以键值对的形式存到字典中
//启动拥有上传文件功能的post请求
manager.POST(urlStr, parameters: bodyDic, constructingBodyWithBlock: { (formData) in
//在这个闭包里设置需要上传的文件
//将图片转成NSData
let imageData = UIImagePNGRepresentation(image)!
//第一个参数是需要上传的文件,第二个是后台规定的参数名
//第三个文件名,但是后台一般不用,所以意义不大
//第四个后台规定的文件类型。例:"image/png" "image/jpeg" "text/html" "text/json" "text/xml"等
formData.appendPartWithFileData(imageData, name: "headimage", fileName: "1.png", mimeType: "image/png")
}, progress: nil, success: { (dataTask, responseObject) in
//上传成功的回调
let dic = try! NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options: .AllowFragments)
print(dic)
}) { (dataTask, error) in
print("上传时网络发生问题")
}
使用系统相册
//打开系统相册
let imagePickerController = UIImagePickerController()//照片选择器
imagePickerController = self//<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
self.presentViewController(imagePickerController, animated: true) {}
//选择照片后触发的方法
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
//获取点击到的图片
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
//将图片转成NSData
let imageData = UIImagePNGRepresentation(image)!
imagePickerController.dismissViewControllerAnimated(false, completion: nil)
}