上传大文件 NSInputStream
来源:互联网 发布:淘宝清退中小卖家 编辑:程序博客网 时间:2024/05/22 17:14
/** * @method + (NSString *)uploadVideoFilePath:(NSString *)filePath withFileName:(NSString *)fileName withFileExt:(NSString *)fileExt withErrorCode:(NSInteger *)errorCode * * @abstract 上传文件 * * @param fileData 文件数据 * @param errorCode [out]错误代码 * * @return 如果上传成功则返回资源路径 */+ (NSString *)uploadVideoFilePath:(NSString *)filePath withFileName:(NSString *)fileName withFileExt:(NSString *)fileExt withErrorCode:(NSInteger *)errorCode{ NSMutableString * uploadFileURL = [[NSMutableString alloc] initWithCapacity:20]; [uploadFileURL appendFormat:@"http://%@/upload_file",UPLOAD_HOST]; [uploadFileURL appendFormat:@"?%@",[self getURLSuffixWithURL]]; //创建Request对象 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:uploadFileURL]]; [request setHTTPMethod:@"POST"]; NSMutableData *body = [NSMutableData data]; //设置表单项分隔符 NSString *boundary = @"---------------------------20140601chrrsmusic1703"; //设置内容类型 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; //写入图片的内容 NSString * fileFullName = [NSString stringWithFormat:@"%@.%@",fileName,fileExt]; [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",fileName,fileFullName] dataUsingEncoding:NSUTF8StringEncoding]]; NSString * contentTypeStr = [NSString stringWithFormat:@"Content-Type: video/%@\r\n\r\n",fileExt]; [body appendData:[contentTypeStr dataUsingEncoding:NSUTF8StringEncoding]]; // NSString * appendDataStr = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding]]; // DELOG(@"appendDataStr: \r\n%@",appendDataStr); // 视频数据 NSInputStream * fileStream = [[NSInputStream alloc] initWithFileAtPath:filePath]; [fileStream open]; NSInteger maxLength = 128; uint8_t readBuffer [maxLength]; BOOL endOfStreamReached = NO; while (! endOfStreamReached) { NSInteger bytesRead = [fileStream read:readBuffer maxLength:maxLength]; if (bytesRead == 0) {//文件读取到最后 endOfStreamReached = YES; }else if (bytesRead == -1) {//文件读取错误 endOfStreamReached = YES; }else { [body appendBytes:readBuffer length:bytesRead]; } } [fileStream close]; [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; //写入尾部内容 [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; NSHTTPURLResponse *urlResponese = nil; NSError *error = [[NSError alloc]init]; NSData* resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponese error:&error]; if (!resultData) { *errorCode = -1; return nil; } NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:resultData options:NSJSONReadingMutableLeaves error:nil]; NSInteger statusCode = [[NSString ensureStringFor:[jsonData objectForKey:@"state"]] integerValue]; *errorCode = statusCode; if (statusCode == 402) { // 发出需要登录的通知 dispatch_async(dispatch_get_main_queue(), ^{ [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NEED_LOGINTOKEN object:nil]; }); } if (statusCode != 0) { *errorCode = statusCode; return nil; }else{ NSDictionary * data = [jsonData objectForKey:@"data"]; if (![data isKindOfClass:[NSDictionary class]]) { return nil; }else{ NSString * fileURL = [NSString ensureStringFor:[data objectForKey:@"uri"]]; return fileURL; } }}
0 0
- 上传大文件 NSInputStream
- iOS - NSINputStream输入流的两种解决方案(适用大文件上传读取)
- 使用NSInputStream逐行处理大文件
- 通过NSInputStream读取大文件的指定起始内容
- iOS开发——使用NSInputStream逐行读入大文件
- NSInputStream读取文件
- 用输入流NSInputStream 来实现图片,文件等的上传
- iOS开发——使用NSInputStream逐行读入大文件(2)
- 用NSInputStream 来实现图片上传
- 文件读写与NSInputStream的简单使用
- 大文件上传研究
- webservice上传大文件
- 大文件分段上传
- 大文件上传解决办法
- 大文件上传
- 分块上传大文件
- Web大文件上传
- php上传大文件
- iOS 自定制导航栏 以及左右按钮 方便快捷 直接使用
- Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
- [LeetCode]Power of Four
- mybatis存入数据库后没有时分秒时间不全只有年月日
- JDK1.7新特性(二)Fork/Join框架demo
- 上传大文件 NSInputStream
- 关于thinkcmf(挖个坑)
- MapReudce源码分析之Mapper
- c++ 字符串连接问题
- 输入流对象cin读取输入流的三种方式
- 求第k小的数
- iOS多线程的初步研究(四)-- NSTimer
- 十、深度优先搜索(DFS)
- 数据库结构设计的更改,默认不准,如何让它许可