ios网络学习------10 原生API文件上传

使用原生态的api上传文件的实现:

#import "MainViewController.h"

@interface MainViewController ()
@property (weak, nonatomic) UIImageView *imageView;
@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //定义Imageview并设置图像
    UIImage *image = [UIImage imageNamed:@"头像1.png"];
    UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
    [imageView setFrame:CGRectMake(60, 20, 200, 200)];
    [self.view addSubview:imageView];
    self.imageView = imageView;

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setFrame:CGRectMake(60, 240, 200, 40)];

    [button setTitle:@"upload" forState:UIControlStateNormal];
    [self.view addSubview:button];

    [button addTarget:self action:@selector(uploadImage) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

#pragma mark 上传文件(图像)
- (void)uploadImage
{
    NSLog(@"upload");
    //思路: 须要使用http的post方法上传文件
    //调用的url是http://localhost/~apple/itcast/upload.php
    //数据体的參数名:file

    //1建立URL
    NSURL *url = [NSURL URLWithString:@"http://localhost/~apple/itcast/upload.php"];
    //2建立NSMutableRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //1)设置request的属性。设置方法
    [request setHTTPMethod:@"POST"];

    //2)设置数据体
    //1> 设置boundary的字符串,能够复用

    NSString *boundary = @"uploadBoundary";
    //2>头部字符串

    NSMutableString *startStr = [NSMutableString string];
    [startStr appendFormat:@"--%@\n", boundary];
    [startStr appendString:@"Content-Disposition: form-data; name=\"file\"; filename=\"upload.png\"\n"];
    [startStr appendString:@"Content-Type: image/png\n\n"];

    //3>尾部字符串
    NSMutableString *endStr = [NSMutableString string];
    [endStr appendFormat:@"--%@\n", boundary];
    [endStr appendString:@"Content-Disposition: form-data: name=\"submit\"\n\n"];
    [endStr appendString:@"Submit\n"];
    [endStr appendFormat:@"--%@--", boundary];

    //4>拼接数据体
    NSMutableData *bodyData = [NSMutableData data];
    [bodyData appendData:[startStr dataUsingEncoding:NSUTF8StringEncoding]];
    NSData *imageData = UIImagePNGRepresentation(self.imageView.image);
    [bodyData appendData:imageData];
    [bodyData appendData:[endStr dataUsingEncoding:NSUTF8StringEncoding]];
    [request setHTTPBody:bodyData];

    //5>指定Content-Type,在上传文件时,须要指定content-type和content-length
    NSString *contentStr = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    [request setValue:contentStr forKey:@"Content-Type"];

    //6>指定Content-Length
    NSInteger length = [bodyData length];
    [request setValue:[NSString stringWithFormat:@"%d", length] forKey:@"Content-Length"];

    //3使用NSURLConnection的同步方法上传文件。由于须要用户确认文件是否上传成功。

//在使用http上传文件时,一般是有限制大小的。一般不会超过2M.
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *resultStr = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", resultStr);
}

@end
时间: 2024-12-14 21:33:07

ios网络学习------10 原生API文件上传的相关文章

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三部分: https://www.cnblogs.com/cgzl/p/8525541.html 第四部分: https://www.cnblogs.com/cgzl/p/8536350.html 这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

JavaWeb学习总结(五十)——文件上传和下载 http://www.cnblogs.com/xdp-gacl/p/4200090.html

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

Struts2学习(八)—文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的实现进行一下讲解,这里 我们使用的struts2 web项目所导入的jar包中的**commons-fileupload-1.3.1.jar commons-io-

封装了okhttp的网络框架,支持大文件上传下载,上传进度...

本帖最后由 anjoy紫外线 于 2016-4-20 16:42 编辑   1.用法 对于Eclipse不能运行项目的,提供了apk供直接运行,位于项目根目录 okhttputils_v1.x.x.apk. 本项目Demo的网络请求是我自己的服务器,有时候可能不稳定,网速比较慢时请耐心等待.. 对于Android Studio的用户,可以选择添加: compile 'com.lzy.net:okhttputils:1.3.0'  //可以单独使用,不需要依赖下方的扩展包    compile'c

struts2学习笔记之十:文件上传

Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4.表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5.Struts2的Action 取得文件名称->>规则:输入域的名称+固定字符串FileN

SpringMVC学习总结(五)——SpringMVC文件上传例子

这是用的是SpringMVC-3.1.1.commons-fileupload-1.2.2和io-2.0.1 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/20

SpringBoot学习6:springboot文件上传

1.编写页面uploadFile.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> <body> <form action="uploadFile" method="post" enct