iOS ASI--文件上传

1.文件上传的示例代码

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/photo"];

// 设置请求

self.postRequest = [ASIFormDataRequest requestWithURL:url];

// 指定要上传文件的路径

NSString *file = [[NSBundle mainBundle] pathForResource:@"123.txt" ofType:nil];

// 设置和文件相关的参数

  [self.postRequest setFile:file forKey:@"file"]; // 方法1,客户端本地文件的文件名是是什么,传到服务器端的文件名就是什么

// [self.postRequest setFile:file withFileName:@"newName.txt" andContentType:@"text/plain" forKey:@"file"]; // 方法2,可以自定义文件名

// NSData *data = [NSData dataWithContentsOfFile:file]; // 方法3,在无法获取本地文件的path时,适合用这个方法,比如拍照上传

// [self.postRequest setData:data forKey:@"file"];

// 设置其他请求参数

[self.postRequest setPostValue:@"ios" forKey:@"username"];

[self.postRequest setPostValue:@"123" forKey:@"pwd"];

// 接收到服务器返回的数据

[self.postRequest setCompletionBlock:^{

NSLog(@"上传完咯");

}];

// 发起请求

[self.postRequest startAsynchronous];

2.照片上传

2.1先把照片写入相册. 写入前,需要用户授权,iOS会自动处理授权;照片写入相册后,可以在模拟器的相册里看到照片

UIImage *image = [UIImage imageNamed:@"123.png"];

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

   

2.2 获取照片

// 打开相册

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

[self pickPhoto];

}

- (void)pickPhoto{

UIImagePickerController *pick = [[UIImagePickerController alloc]init];

pick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //设置照片来源,第1个和第3个差不多,都是来源相册;第2个是来源相机

  //    UIImagePickerControllerSourceTypePhotoLibrary,

  //    UIImagePickerControllerSourceTypeCamera,

  //    UIImagePickerControllerSourceTypeSavedPhotosAlbum

pick.delegate = self; //要做照片选择器的代理,需要遵守2个协议UINavigationControllerDelegate, UIImagePickerControllerDelegate

[self presentViewController:pick animated:YES completion:nil];

}

#pragma mark - UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

[self dismissViewControllerAnimated:YES completion:nil];

UIImage *image = info[UIImagePickerControllerOriginalImage];

[self upload:image];

}

- (void)upload:(UIImage *)image{

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/photo"];

// 设置请求

self.postRequest = [ASIFormDataRequest requestWithURL:url];

NSData *data = UIImagePNGRepresentation(image);

[self.postRequest setData:data withFileName:@"newImage.png" andContentType:@"image/png" forKey:@"file"];

// 设置其他请求参数

[self.postRequest setPostValue:@"ios" forKey:@"username"];

[self.postRequest setPostValue:@"123" forKey:@"pwd"];

// 接收到服务器返回的数据

[self.postRequest setCompletionBlock:^{

NSLog(@"上传完咯");

}];

// 发起请求

[self.postRequest startAsynchronous];

}

注:上面的代码是上传相册里的照片,如果是上传相机刚刚拍好的照片,只需要把  pick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary, 改成pick.sourceType = UIImagePickerControllerSourceTypeCamera,其他代码不用改.

3.大文件上传,要注意大文件上传不要用data上传,应该用file上传,因为把大文件序列化成NSData很耗性能,也没那么大的内存

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/bigDataFolder"];

// 设置请求

self.postRequest = [ASIFormDataRequest requestWithURL:url];

// 假设大文件在cache里

NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

NSString *filePath = [cache stringByAppendingPathComponent:@"data.zip"];

[self.postRequest setFile:filePath forKey:@"file"];

// 设置其他请求参数

[self.postRequest setPostValue:@"ios" forKey:@"username"];

[self.postRequest setPostValue:@"123" forKey:@"pwd"];

// 上传进度

self.postRequest.uploadProgressDelegate = self.progressView;

// 监听请求

[self.postRequest setCompletionBlock:^{

NSLog(@"上传完咯");

}];

// 发起请求

[self.postRequest startAsynchronous];

补充:ASI不支持断点上传,ASI是基于HTTP协议,而HTTP协议不支持断点上传,TCP/IP支持

时间: 2024-10-13 15:13:11

iOS ASI--文件上传的相关文章

【iOS】文件上传小记

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

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"

iOS开发-文件上传原理

文件上传 编写文件上传类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 *)ur

ios 多文件上传

/** *  上传多个文件 * *  @param url      请求接口地址 *  @param filedata 文件名称和数据(key:value) *  @param btnName  上传网页的btn (接口) *  @param parms    附加上传参数 */ -(void)httpSendDataWithUrl:(NSString*)url data:(NSDictionary*)filedata name:(NSString*)btnName parms:(NSDict

IOS开发之文件上传

IOS开发之文件上传 在移动应用开发  文件形式上传是必不可少的,最近把IOS这块文件上传文件代码简单的整理一下,如果大家有需要安卓这边的代码,本人也可以分享给大家!QQ群:74432915  欢迎大家一起探讨 首先本demo采用网上开源框架 AFNetworking  源码:http://download.csdn.net/detail/wangliang198901/7809439 将整个框架导入IOS新建立的工程中 在FKAppDelegate.h声明 如下: #import <UIKit

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

ios 文件上传

ASIHTTPRequest 框架支持文件的上传: 文件的上传使用ASIFormDataRequest; NSString *s = @"文件传输"; NSURL *url = [NSURL URLWithString:@"http://localhost:8080/text"];//传输地址 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; NSStringEncoding

【分享】兼容ie6-9和现代浏览器以及ios,android,pad等触屏设备的异步文件上传插件

核心代码 /** * 该插件用于兼容ie6-7-8-9及现代浏览器的异步上传文件. * 请注意,在ie6-7-8-9上面的原理是: * 新添加一个表单和一个iframe,然后每次选择都将file输入框复制到该表单上面,然后submit整个表单,这样就可以实现类似ajax提交文件的效果, * 但是有一点是没办法处理的,就是在客户端预览图片及判断文件大小.现代浏览器则可以. */ var AjaxFileInput=function(opts){ var settings={ container:"

ios 文件上传, post数据

一.文件下载 获取资源文件大小有两张方式 1. HTTP HEAD方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:kTimeout]; request.HTTPMethod = @"HEAD"; [NSURLConnection sendAsynchronousRequest:request queue:self.myQueue