zoukankan      html  css  js  c++  java
  • iOS开发-文件上传原理

    • 文件上传
    1. 编写文件上传类UploadFile.h
      //
      //  UploadFile.h
      //  02.Post上传
      //
      //  Created by wyh on 15-1-29.
      //  Copyright (c) 2015年 itcast. All rights reserved.
      //
      
      #import <Foundation/Foundation.h>
      
      @interface UploadFile : NSObject
      
      - (void)uploadFileWithURL:(NSURL *)url data:(NSData *)data;
      
      @end
    2. 编写文件上传类UploadFile.m
      //
      //  UploadFile.m
      //  02.Post上传
      //
      //  Created by why on 15-1-29.
      //  Copyright (c) 2015年 itcast. All rights reserved.
      //
      
      #import "UploadFile.h"
      
      @implementation UploadFile
      // 拼接字符串
      static NSString *boundaryStr = @"--";   // 分隔字符串
      static NSString *randomIDStr;           // 本次上传标示字符串
      static NSString *uploadID;              // 上传(php)脚本中,接收文件字段
      
      - (instancetype)init
      {
          self = [super init];
          if (self) {
              randomIDStr = @"itcast";
              uploadID = @"uploadFile";
          }
          return self;
      }
      
      #pragma mark - 私有方法
      - (NSString *)topStringWithMimeType:(NSString *)mimeType uploadFile:(NSString *)uploadFile
      {
          NSMutableString *strM = [NSMutableString string];
          
          [strM appendFormat:@"%@%@
      ", boundaryStr, randomIDStr];
          [strM appendFormat:@"Content-Disposition: form-data; name="%@"; filename="%@"
      ", uploadID, uploadFile];
          [strM appendFormat:@"Content-Type: %@
      
      ", mimeType];
          
          NSLog(@"%@", strM);
          return [strM copy];
      }
      
      - (NSString *)bottomString
      {
          NSMutableString *strM = [NSMutableString string];
          
          [strM appendFormat:@"%@%@
      ", boundaryStr, randomIDStr];
          [strM appendString:@"Content-Disposition: form-data; name="submit"
      
      "];
          [strM appendString:@"Submit
      "];
          [strM appendFormat:@"%@%@--
      ", boundaryStr, randomIDStr];
          
          NSLog(@"%@", strM);
          return [strM copy];
      }
      
      #pragma mark - 上传文件
      - (void)uploadFileWithURL:(NSURL *)url data:(NSData *)data
      {
          // 1> 数据体
          NSString *topStr = [self topStringWithMimeType:@"image/png" uploadFile:@"头像1.png"];
          NSString *bottomStr = [self bottomString];
          
          NSMutableData *dataM = [NSMutableData data];
          [dataM appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]];
          [dataM appendData:data];
          [dataM appendData:[bottomStr dataUsingEncoding:NSUTF8StringEncoding]];
          
          // 1. Request
          NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
          
          // dataM出了作用域就会被释放,因此不用copy
          request.HTTPBody = dataM;
          
          // 2> 设置Request的头属性
          request.HTTPMethod = @"POST";
          
          // 3> 设置Content-Length
          NSString *strLength = [NSString stringWithFormat:@"%ld", (long)dataM.length];
          [request setValue:strLength forHTTPHeaderField:@"Content-Length"];
          
          // 4> 设置Content-Type
          NSString *strContentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", randomIDStr];
          [request setValue:strContentType forHTTPHeaderField:@"Content-Type"];
          
          // 3> 连接服务器发送请求
          [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
              
              NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
              NSLog(@"%@", result);
          }];
      }
      
      
      
      @end
    3. 控制器调用
      //
      //  MJViewController.m
      //  02.Post上传
      //
      //  Created by wyh on 15-1-29.
      //  Copyright (c) 2015年 itcast. All rights reserved.
      //
      
      #import "ViewController.h"
      #import "UploadFile.h"
      
      @interface ViewController ()
      
      @end
      
      @implementation ViewController
      
      - (void)viewDidLoad
      {
          [super viewDidLoad];
      
          UploadFile *upload = [[UploadFile alloc] init];
          
          NSString *urlString = @"http://localhost/upload.php";
          
          NSString *path = [[NSBundle mainBundle] pathForResource:@"头像1.png" ofType:nil];
          NSData *data = [NSData dataWithContentsOfFile:path];
          
          [upload uploadFileWithURL:[NSURL URLWithString:urlString] data:data];
      }
      
      @end
  • 相关阅读:
    盘点黑客攻击途径:最常用的7个策略及简单的防护方法
    python 小技巧
    vi 使用方法
    Mac下添加环境变量(一劳永逸)
    增强for循环
    十大排序算法
    java中break、continue、return作用
    Mac zsh中所有命令失效
    Mac 每次都要执行source ~/.bash_profile 后,配置的环境变量才生效
    Mac下添加环境变量
  • 原文地址:https://www.cnblogs.com/wangyinghui/p/4356719.html
Copyright © 2011-2022 走看看