zoukankan      html  css  js  c++  java
  • 关于AFN上传文件的小例子(选择相机及照片)

    AFN上传文件:

    #import "HMViewController.h"
    #import "AFNetworking.h"
    
    @interface HMViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate,UIActionSheetDelegate>
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    - (IBAction)upload;
    @end
    
    @implementation HMViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"请选择图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照", @"相册", nil];
        [sheet showInView:self.view.window];
    }
    
    #pragma mark - UIActionSheet
    - (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];
    }
    
    #pragma mark - UIImagePickerControllerDelegate
    /**
     *  在选择完图片后调用
     *
     *  @param info   里面包含了图片信息
     */
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        // 销毁控制器
        [picker dismissViewControllerAnimated:YES completion:nil];
        
        // 获得图片
        UIImage *image = info[UIImagePickerControllerOriginalImage];
        
        // 显示图片
        self.imageView.image = image;
    }
    
    - (void)upload1
    {
        // 1.创建一个管理者
        AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
        
        // 2.封装参数(这个字典只能放非文件参数)
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"username"] = @"123";
        params[@"age"] = @20;
        params[@"pwd"] = @"456";
        params[@"height"] = @1.55;
        
        // 2.发送一个请求
        NSString *url = @"http://localhost:8080/MJServer/upload";
        [mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            // 在发送请求之前会自动调用这个block
            // 需要在这个block中添加文件参数到formData中
            
            /**
             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];
            
            /**
             FileData : 需要上传的文件的具体数据
             name : 服务器那边接收文件用的参数名
             fileName : (告诉服务器)所上传文件的文件名
             mimeType : 所上传文件的文件类型
             */
            //        UIImage *image = [UIImage imageNamed:@"minion_01"];
            //        NSData *fileData = UIImagePNGRepresentation(image);
            //        [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"上传成功");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"上传失败");
        }];
    }
    
    - (IBAction)upload {
        if (self.imageView.image == nil) return;
        
        // 1.创建一个管理者
        AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
        
        // 2.封装参数(这个字典只能放非文件参数)
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"username"] = @"123";
        params[@"age"] = @20;
        params[@"pwd"] = @"456";
        params[@"height"] = @1.55;
        
        // 2.发送一个请求
        NSString *url = @"http://192.168.15.172:8080/MJServer/upload";
        [mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            NSData *fileData = UIImageJPEGRepresentation(self.imageView.image, 1.0);
            [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.jpg" mimeType:@"image/jpeg"];
    
            // 不是用这个方法来设置文件参数
    //        [formData appendPartWithFormData:fileData name:@"file"];
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"上传成功");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"上传失败");
        }];
        
        // 文件下载,文件比较大,断点续传技术:普遍所有的HTTP服务器都支持
        // 文件上传,文件比较大,断点续传技术:一般的HTTP服务器都不支持,常用的技术用的是Socket(TCPIP、UDP)
    }
    @end
  • 相关阅读:
    HBase with MapReduce (MultiTable Read)
    HBase with MapReduce (SummaryToFile)
    HBase with MapReduce (Summary)
    HBase with MapReduce (Read and Write)
    HBase with MapReduce (Only Read)
    Hbase中的BloomFilter(布隆过滤器)
    HBase的快照技术
    How To Use Hbase Bulk Loading
    Cloudera-Manager修改集群的IP
    Java中的HashSet和TreeSet
  • 原文地址:https://www.cnblogs.com/ZMiOS/p/5070992.html
Copyright © 2011-2022 走看看