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
  • 相关阅读:
    Qt多文档实现屏幕空间(类似监控多画面)效果
    python 使用ctypes调用C/C++ dll
    C++回调函数理解使用
    Qt MDI子窗口图标设置问题
    CentOS 7安装Qt5.12.1过程
    linux遇到xxx is not in the sudoers file.This incident will be reported的问题
    3D建模的类型:哪种最适合您的需求?
    letter-shell | 一个功能强大的嵌入式shell(转)
    EasyLogger | 一款轻量级且高性能的日志库(转)
    Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译(转)
  • 原文地址:https://www.cnblogs.com/wangyinghui/p/4356719.html
Copyright © 2011-2022 走看看