AFHTTPRequestOperationManager注意点
ActionSheet在控制器view上,因为点击拍照时,会modal出另外一个控制器,当前的控制器view就会从窗口中移除。就会报ActionSheet不在窗口上。
- (void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent
*)event
{
UIActionSheet *sheet = [[UIActionSheet
alloc]
initWithTitle:@"图片上传"
delegate:self
cancelButtonTitle:@"取消"
destructiveButtonTitle:nil
otherButtonTitles:@"拍照",
@"相册",nil];
[sheet
showInView:self.view];
}
#pragma mark -
实现UIActionSheetDelegate代理方法
- (void)actionSheet:(UIActionSheet
*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
UIImagePickerController
*ipc = [[UIImagePickerController
alloc]
init];
ipc.delegate
=
self;
switch (buttonIndex) {
case
0:
if (![UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
return;
ipc.sourceType
=
UIImagePickerControllerSourceTypeCamera;
break;
case
1:
if (![UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
return;
ipc.sourceType
=
UIImagePickerControllerSourceTypePhotoLibrary;
break;
default:
break;
}
[self
presentViewController:ipc
animated:YES
completion:nil];
}
注意:
如果在switch的case中定义一个局部变量,需要用大括号括住。
- (void)imagePickerController:(UIImagePickerController
*)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info
{
//
关闭UIImagePickerController控制器
[self
dismissViewControllerAnimated:YES
completion:nil];
NSLog(@"%@",info);
//
获取图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
self.imageV.image
= image;
}
- (IBAction)upLoad
{
//
创建一个管理者
AFHTTPRequestOperationManager
*manger = [AFHTTPRequestOperationManager
manager];
//
设置参数
NSMutableDictionary
*params = [NSMutableDictionary
dictionary];
params[@"username"] =
@"123";
params[@"pwd"] =
@"123";
//
设置URL
NSString *url =
@"http://192.168.15.56:8080/MJServer/upload";
[manger
POST:url
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData>
formData) {
注意:
在发送请求之前会自动调用这个block
需要在这个block中添加文件参数到formData中
NSData *fileData =
UIImageJPEGRepresentation(self.imageV.image,
1.0);
[formData
appendPartWithFileData:fileData
name:@"file"
fileName:@"image.png"
mimeType:@"image/png"];
}
success:^(AFHTTPRequestOperation
*operation,
id responseObject) {
NSLog(@"上传成功");
}
failure:^(AFHTTPRequestOperation
*operation,
NSError *error) {
NSLog(@"上传失败");
}];
}
注意:
1.保留照片的质量
NSData *fileData = UIImageJPEGRepresentation(self.imageV.image, 1.0);
2.AFN不能监听文件的上传进度,ASI可以监听文件的上传进度。
3.需要上传的文件的具体数据
FileData :
需要上传的文件的具体数据
name : 服务器那边接收文件用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的文件类型
NSData
*fileData =
UIImageJPEGRepresentation(self.imageV.image,
1.0);
[formData
appendPartWithFileData:fileData
name:@"file"
fileName:@"image.png"
mimeType:@"image/png"];
4.需要上传的文件的URL路径
FileURL :
需要上传的文件的URL路径
name : 服务器那边接收文件用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的文件类型
NSURL
*url = [[NSBundle
mainBundle]
URLForResource:@"itcast"
withExtension:@"txt"];
[formData
appendPartWithFileURL:url
name:@"file"
fileName:@"test.txt"
mimeType:@"text/plain"
error:nil];