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:@"%@%@\n", boundaryStr, randomIDStr];
        [strM appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\n", uploadID, uploadFile];
        [strM appendFormat:@"Content-Type: %@\n\n", mimeType];
    
        NSLog(@"%@", strM);
        return [strM copy];
    }
    
    - (NSString *)bottomString
    {
        NSMutableString *strM = [NSMutableString string];
    
        [strM appendFormat:@"%@%@\n", boundaryStr, randomIDStr];
        [strM appendString:@"Content-Disposition: form-data; name=\"submit\"\n\n"];
        [strM appendString:@"Submit\n"];
        [strM appendFormat:@"%@%@--\n", 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
时间: 2024-08-06 11:54:56

iOS开发-文件上传原理的相关文章

Web文件上传原理

采用WEB技术实现B/S(浏览器/服务器)结构的管理系统是办公自动化的发展趋势.基于WEB技术的管理系统,由于开发周期短:与用户平台无关:易于实现交互式应用:能对信息进行快速.高效的收集.处理和发布,近几年来得到了迅速发展.而ASP技术由于其开发效率高.交互性好,安全性强等特点,逐渐成为开发管理系统的首选工具. 许多基于WEB的应用都涉及文件上传操作.常见的文件上传技术有:基于HTTP协议的:基于VB(或DELPHI等编程语言)开发的文件上传组件的:基于数据库技术的等等.这些方法一般都需要编程者

【iOS】文件上传小记

iOS中用系统提供的API能实现能实现文件的上传与下载,分别有两种方式.NSURLConnection与NSURLSession. 其中NSURLConnection是使用很久的的一种方式,NSURLSession是新出来的一种方式. 一. POST方式上传 POST方式提交信息默认使用的是 : *Content-Type:  application/x-www-form-urlencoded. *输入中文时,post方式自动进行转义(苹果中自动). 国内的绝大多数网站都采用这种方式上传文件(支

[转]文件上传原理:Web上传文件的原理及实现

现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的CommonsFileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了CommonsFileUpload).在asp.net中也有相应的上传文件的控件. 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理.在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件

PHP单文件上传原理及上传函数的封装

<?php //单文件上传函数的封装 //文件上传原理:将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可. //文件的方向:客户端-->服务器(临时文件)-->指定目录,当文件进入服务器时它就是临时文件了,这时操作中要用临时文件的名称tmp_name. //在客户端设置上传文件的限制(文件类型和大小)是不安全的,因为客户能通过源代码修改限制,所以在服务端这里设置限制. //设置编码为UTF-8,以避免中文乱码 header('Content-Type:text/ht

php文件上传原理详解(含源码)

1.文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 2.客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data" 3.服务器端配置 file_uploads = On,支持HTTP上传 uoload_tmp_dir = ,临时文件保存目录 upload_max_filesize = 2M,允许上传文件的最大值 max_file_uploads = 20 ,允许一次上传到的最大文件数 post_max_s

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

文件上传与下载学习笔记(1)---文件上传原理及配置

一:原理:将客户端的文件上传到服务器端的临时目录,再将服务器端的临时文件移动到指定目录. 二:客户端的配置 表单的method必须为post方法 表单必须添加enctype="multipart/form-data"属性 二者缺一不可. 三:将临时文件移动到指定目录 两种方法:1:move_uploaded_file($filename, $destination) 2:copy($source, $dest) 四:php.ini中的配置 在php.ini中搜索uploads ,会看到

IOS后台文件上传

public ModelAndView GetImage(HttpServletRequest request,   HttpServletResponse response) throws Exception {  Map<String, Object> maps = new HashMap<String, Object>(); try {   // 创建一个临时文件存放要上传的文件,第一个参数为上传文件大小,第二个参数为存放的临时目录   DiskFileItemFactory

IOS 多文件上传 Java web端(后台) 使用List&lt;MultipartFile&gt; 接收出现的问题

先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee" :self.userId, @"projectName" :itemName.text, @"proceedingName":Name.text, @"content" :content.text, @"urgency"