iOS开发ASIHTTPRequest直接读取磁盘数据流请求体

移动开发 iOS
本文为大家介绍了iOS开发ASIHTTPRequest直接读取磁盘数据流的请求体的内容,其中包括ASIFormDataRequests,普通ASIHTTPRequest等等内容。

本文为大家介绍了iOS开发ASIHTTPRequest直接读取磁盘数据流的请求体的内容,其中包括ASIFormDataRequests,普通ASIHTTPRequest等等内容。

从0.96版本开始,ASIHTTPRequest可以使用磁盘上的数据来作为请求体。这意味着不需要将文件完全读入内存中,这就避免的当使用大文件时的严重内存消耗。使用这个特性的方法有好几种:ASIFormDataRequests和普通ASIHTTPRequest等等,下面来具体介绍。

ASIFormDataRequests

当使用setFile:forKey:时,ASIFormDataRequests自动使用这个特性。request将会创建一个包含整个post体的临时文件。文件会一点一点写入post体。这样的request是由 CFReadStreamCreateForStreamedHTTPRequest创建的,它使用文件读取流来作为资源。

  1. NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; 
  2. ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
  3. [request setPostValue:@"foo" forKey:@"post_var"]; 
  4. [request setFile:@"/Users/ben/Desktop/bigfile.txt" forKey:@"file"]; 
  5. [request startSynchronous];

普通ASIHTTPRequest

如果你明白自己的request体会很大,那么为这个request设置流式读取模式。

  1. [request setShouldStreamPostDataFromDisk:YES]; 

下面的例子中,我们将一个NSData对象添加到post体。这有两个方法:从内存中添加(appendPostData:),或者从文件中添加(appendPostDataFromFile:);

  1. NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; 
  2. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  3. [request setShouldStreamPostDataFromDisk:YES]; 
  4. [request appendPostData:myBigNSData]; 
  5. [request appendPostDataFromFile:@"/Users/ben/Desktop/bigfile.txt"]; 
  6. [request startSynchronous]; 

这个例子中,我们想直接PUT一个大文件。我们得自己设置setPostBodyFilePath ,ASIHTTPRequest将使用这个文件来作为post体。

  1. NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"]; 
  2. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  3. [request setRequestMethod:@"PUT"]; 
  4. [request setPostBodyFilePath:@"/Users/ben/Desktop/another-big-one.txt"]; 
  5. [request setShouldStreamPostDataFromDisk:YES]; 
  6. [request startSynchronous]; 

IMPORTANT:切勿对使用上述函数的request使用setPostBody——他们是互斥的。只有在你要自己建立request的请求体,并且还准备在内存中保持这个请求体时,才应该使用setPostBody。

责任编辑:闫佳明 来源: dreamingwish
相关推荐

2013-07-21 18:22:59

iOS开发ASIHTTPRequ

2013-07-21 18:18:00

iOS开发ASIHttpRequ

2013-07-22 13:54:32

iOS开发ASIHTTPRequ

2011-08-22 10:06:38

IOS开发ASIHTTPRequHTTP 请求

2013-07-22 14:38:00

iOS开发ASIHTTPRequ

2013-07-21 18:27:15

iOS开发ASIHTTPRequ

2013-07-21 18:32:13

iOS开发ASIHTTPRequ

2013-07-22 14:15:17

iOS开发ASIHTTPRequ

2013-07-22 14:33:15

iOS开发ASIHTTPRequ

2013-07-22 14:43:57

iOS开发ASIHTTPRequ

2013-07-22 14:25:29

iOS开发ASIHTTPRequ

2011-08-12 13:35:23

iPhone文件流ASIHTTPRequ

2013-07-21 18:09:21

iOS开发ASIHttpRequ创建和执行reques

2013-07-22 14:02:17

iOS开发ASIHTTPRequ

2013-07-22 13:48:55

iOS开发ASIHTTPRequ使用Cookie

2013-07-22 14:29:35

iOS开发ASIHTTPRequ

2013-07-21 18:04:22

ASIHttpRequiOS开发

2013-03-25 14:13:23

iOSASIHTTPRequ

2022-03-18 08:57:17

前端数据流选型

2011-12-14 15:57:13

javanio
点赞
收藏

51CTO技术栈公众号