NSOutputStream-保存网络资源到本地

_filePath = [[NetworkManager sharedInstance] pathForTemporaryFileWithPrefix:@"Get"];

_fileStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:NO];

[_fileStream open];

 
 
2.进行网络请求,并返回网络的数据。
 
通过输出流对象,将数据写入到指定的文件中。
 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

NSInteger       dataLength;

const uint8_t * dataBytes;

NSInteger       bytesWritten;

NSInteger       bytesWrittenSoFar;

// 接收到的数据长度

dataLength = [data length];

dataBytes  = [data bytes];

bytesWrittenSoFar = 0;

do {

bytesWritten = [self.fileStream write:&dataBytes[bytesWrittenSoFar]maxLength:dataLength - bytesWrittenSoFar];

assert(bytesWritten != 0);

if (bytesWritten == -1) {

break;

} else {

bytesWrittenSoFar += bytesWritten;

}

} while (bytesWrittenSoFar != dataLength);

}

NSInputStream和NSMutableURLRequest-实现保存文件到服务器

1.准备工作,将需要的类进行声明定义。
*.h 文件

NSURLConnection* _aSynConnection;

NSInputStream *_inputStreamForFile;

NSString *_localFilePath;

 

@property (nonatomic,retain) NSURLConnection* aSynConnection;

@property (nonatomic,retain) NSInputStream *inputStreamForFile;

@property (nonatomic,retain) NSString *localFilePath;

 
*.m 文件

@synthesize inputStreamForFile=_inputStreamForFile;

@synthesize localFilePath=_localFilePath;

@synthesize aSynConnection=_aSynConnection;

 
2.进行请求
 

- (void)btnClickAction:(id)sender{

// 初始化目标地址的URL(发送到哪里)

NSURL *serverURL;

NSString *strURL=@"http://www.xxx.com/fileName.png";// 这里用图片为例

strURL = [strURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

serverURL=[NSURL URLWithString:strURL];

// 初始化本地文件路径,并与NSInputStream链接

self.localFilePath=@"本地的图片路径";

self.inputStreamForFile = [NSInputStream inputStreamWithFileAtPath:self.localFilePath];

// 上传大小

NSNumber *contentLength;

contentLength = (NSNumber *) [[[NSFileManager defaultManager]attributesOfItemAtPath:self.localFilePath error:NULL] objectForKey:NSFileSize];

NSMutableURLRequest *request;

request = [NSMutableURLRequest requestWithURL:serverURL];

[request setHTTPMethod:@"PUT"];

[request setHTTPBodyStream:self.inputStreamForFile];

[request setValue:@"image/png" forHTTPHeaderField:@"Content-Type"];

[request setValue:[contentLength description] forHTTPHeaderField:@"Content-Length"];

// 请求

self.aSynConnection = [NSURLConnection connectionWithRequest:requestdelegate:self];

}

 
3.接受回调函数的状态,判断是否上传成功。

// 收到响应时,会触发

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)aResponse{

NSLog(@"请求成功!");

returnInfoData=[[NSMutableData alloc]init];

totalSize= [aResponse expectedContentLength];

NSHTTPURLResponse * httpResponse;

httpResponse = (NSHTTPURLResponse *)aResponse;

if ((httpResponse.statusCode / 100) != 2) {

NSLog(@"保存失败");

} else {

NSLog(@"保存成功");

}

}

NSOutputStream\NSInputStream的更多相关文章

  1. NSStream

    NSStream 流是位数据通过通信路径的连续传送序列.它是单向的,从一个应用程序的角度,流可以是输入流(读操作流)或者输出流(写操作流),除了基于文件的流之外,其余的都是non-seekable的. ...

  2. ios开发网络学习五:输出流以及文件上传

    一:输出流 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelega ...

  3. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  4. Cocoa Touch(二):数据存储CoreData, NSKeyArchiver, NSOutputStream, NSUserDefaults

    应用程序离不开数据的永久存储,有两种方式实现存储:数据库和文本文件. 作为存储管理器,最基本的功能就是增删改查了. CoreData 1.插入 AppDelegate *app = [[UIAppli ...

  5. iOS开发系列-NSOutputStream

    NSOutputStream 创建一个NSOutputStream实例 - (nullable instancetype)initToFileAtPath:(NSString *)path appen ...

  6. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  7. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  8. AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization

    这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...

  9. iOS---后台运行机制详解

    一.iOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking b ...

随机推荐

  1. HTML基础语句

    一,网页基础结构: 1 <html> 2 <head> 3 <title>我的第一个网页</title> 4 </head> 5 <b ...

  2. GridView布局及适配器优化

    1.布局样式 <GridView android:id="@+id/gridView" android:layout_width="fill_parent" ...

  3. JAVA 读取pdf文件

    第一个路口action /* * wuhan syspro author zhangrui 2010/08/23 */ package jp.co.syspro.poo.action; import ...

  4. 各版本 linux(转)

    Linux各种版本下载 ftp://ftp.linuxforum.net/ISO/Redhat7.3/valhalla-i386-disc1.iso ftp://ftp.linuxforum.net/ ...

  5. 加入强调语气,使用<strong>和<em>标签

    有了段落又有了标题,现在如果想在一段话中特别强调某几个文字,这时候就可以用到<em>或<strong>标签. 但两者在强调的语气上有区别:<em> 表示强调,< ...

  6. Hibernate 性能优化之查询缓存

    查询缓存是建立在二级缓存基础之上的,所以与二级缓存特性相似,是共享的,适合修改不是很频繁的数据 查询缓存不是默认开启的,需要设置      1.在cfg文件中配置 <property name= ...

  7. IDEA中添加各种依赖pom.xml文件内容

    刚实习的小白,今天准备进入项目,纳尼,前辈把框架什么的都搭建好了,默默的抹了一把辛酸泪,刚刚接触自学框架的时候,添加依赖的时候总是各种问题,让前辈发给我之后,才发现人家写的代码相当优美了.下面就是前辈 ...

  8. StringBuilder和string.Format性能对比

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/sbformat.html StringBuilder的性能优于string.For ...

  9. 【USACO 3.3.1】骑马修栅栏

    [描述] Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个程序,读入 ...

  10. 让 IE6/7/8 也支持HTML5标签的方式

    方式一:引入Google的HTML5.js线上文件 <!–[if lt IE9]> <script src="http://html5shiv.googlecode.com ...