过完新年继续学习,让我们来学习下如何计算下载文件大小,并且如何post上传文件

今天才初二,昨天是回家这么长时间以来唯一放开了好好玩儿的一天,玩儿的很开心.开心之后又开始继续研究和复习.首先愿新的一年万事如意,心想事成,最主要身体健康

首先,谈谈如何获取下载资源的信息.

NSString *url_string = @"http://box.dwstatic.com/skin/Teemo/Teemo_Splash_0.jpg";

NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url_string] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

request.HTTPMethod = @"HEAD";

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

NSLog(@"%@", response);

NSLog(@"---------------");

NSLog(@"%@", data);

}

//这个方法只能获得下载资源的信息,不回返回数据体.

除了这个还有其他方式可以获得大小

NSURL *url = [NSURL URLWithString:url_string];//转成url

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.f]; //创建成可变网络请求

[request setHTTPMethod:@"GET"];

[NSURLConnection connectionWithRequest:request delegate:self];

实现代理

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

NSLog(@"要下载文件大小为 %@",response);

}

至于如何下载下来这个文件,相信大家有很多方法.

至于文件上传.

大家可以先创建一个上传model.

  1. #import "UploadFile.h"
  2. @implementation UploadFile
  3. // 拼接字符串
  4. static NSString *boundaryStr = @"--";   // 分隔字符串
  5. static NSString *randomIDStr;           // 本次上传标示字符串
  6. static NSString *uploadID;              // 上传(php)脚本中,接收文件字段
  7. - (instancetype)init
  8. {
  9. self = [super init];
  10. if (self) {
  11. randomIDStr = @"itcast";
  12. uploadID = @"uploadFile";
  13. }
  14. return self;
  15. }
  16. #pragma mark - 私有方法
  17. - (NSString *)topStringWithMimeType:(NSString *)mimeType uploadFile:(NSString *)uploadFile
  18. {
  19. NSMutableString *strM = [NSMutableString string];
  20. [strM appendFormat:@"%@%@\n", boundaryStr, randomIDStr];
  21. [strM appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\n", uploadID, uploadFile];
  22. [strM appendFormat:@"Content-Type: %@\n\n", mimeType];
  23. NSLog(@"%@", strM);
  24. return [strM copy];
  25. }
  26. - (NSString *)bottomString
  27. {
  28. NSMutableString *strM = [NSMutableString string];
  29. [strM appendFormat:@"%@%@\n", boundaryStr, randomIDStr];
  30. [strM appendString:@"Content-Disposition: form-data; name=\"submit\"\n\n"];
  31. [strM appendString:@"Submit\n"];
  32. [strM appendFormat:@"%@%@--\n", boundaryStr, randomIDStr];
  33. NSLog(@"%@", strM);
  34. return [strM copy];
  35. }
  36. #pragma mark - 上传文件
  37. - (void)uploadFileWithURL:(NSURL *)url data:(NSData *)data
  38. {
  39. // 1> 数据体
  40. NSString *topStr = [self topStringWithMimeType:@"image/png" uploadFile:@"头像1.png"];
  41. NSString *bottomStr = [self bottomString];
  42. NSMutableData *dataM = [NSMutableData data];
  43. [dataM appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]];
  44. [dataM appendData:data];
  45. [dataM appendData:[bottomStr dataUsingEncoding:NSUTF8StringEncoding]];
  46. // 1. Request
  47. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
  48. // dataM出了作用域就会被释放,因此不用copy
  49. request.HTTPBody = dataM;
  50. // 2> 设置Request的头属性
  51. request.HTTPMethod = @"POST";
  52. // 3> 设置Content-Length
  53. NSString *strLength = [NSString stringWithFormat:@"%ld", (long)dataM.length];
  54. [request setValue:strLength forHTTPHeaderField:@"Content-Length"];
  55. // 4> 设置Content-Type
  56. NSString *strContentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", randomIDStr];
  57. [request setValue:strContentType forHTTPHeaderField:@"Content-Type"];
  58. // 3> 连接服务器发送请求
  59. [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
  60. NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  61. NSLog(@"%@", result);
  62. }];
  63. }
  64. @end

//接着直接在控制器调用- (void)uploadFileWithURL:(NSURL *)url data:(NSData *)data 即可.

关于上传的代码来源于http://blog.csdn.net/codywangziham01/article/details/38044637,这篇博客关于文件的下载和上传讲解的都很多很详细.

时间: 2024-12-28 20:46:28

过完新年继续学习,让我们来学习下如何计算下载文件大小,并且如何post上传文件的相关文章

使用七牛云存储上传文件学习案例

最近学习了使用七牛云储存上传文件的经验过程,和大家分享一下.语言:C# 七牛云储存用户注册地址:https://portal.qiniu.com/signup?code=3lciek5byj2oi 起初看七牛云储存官方的开发文档,按照上面的说的进行配置的过程中,遇到了2个问题,一个是公司网络的问题(泪奔,网管拒绝了对七牛等云储存应用的上传的请求).另一个是开发文档中配置提示不够完善,也许是鄙人没有找到. 开发文档URL:http://developer.qiniu.com/docs/v6/sdk

FastDfs 学习进阶之环境安装及上传文件测试

一:环境介绍       10.63.13.138 tracker,nginx proxy 10.63.13.143 storage,nginx 二:资源包准备 FastDFS官方论坛:http://www.csource.org 资源下载路径:http://sourceforge.net/projects/fastdfs/files/ 本实验学习环境使用CENTOS 6.4 X64 需要下载的资源包: FastDFS源代码:FastDFS_v5.05.tar.gz nginx模块源代码:fas

Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能----文件上传,示例以一个上传图片的功能为例子 上传功能命名用formidable实现,示例很简单! PS:最近比较忙,距上一次更新已经比较久了^_^! formidable简介 nodejs原生实现上传还是比较麻烦,有兴趣的自已去参考一下网上有网友写的代码 这里选择了formidable,也是githu

黑马程序员 【】java学习之路——TCP(三)客户端上传文件到服务器

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- import java.io.*; import java.net.*; class

angular延时函数和数据加载完才显示主要的页面、上传文件到后端、富文本框编辑框(ckeditor)

延时函数 setTimeout(()=>{ console.log("延时打印") },10000); // 延时10秒打印 //简单等数据加载完才显示主要的页面 1.先下载ngx-loading模块 npm install --save ngx-loading 2.在app.module.ts中引入NgxLoadingModule模块 import {NgxLoadingModule} from 'ngx-loading'; imports: [ BrowserModule,

学习MVC之租房网站(七)-房源管理和配图上传

在上一篇<学习MVC之租房网站(六)-用户登录和权限控制>完成了后台用户登录和权限控制功能的开发,接下来要完成的是房源的管理,用户在后台新增.编辑房源信息,供前台用户操作. 一 房源管理 1 房源列表的显示和删除比较常规,但事后也有一些需要注意的地方 a) 关于分页,因为很多地方都会用到,于是封装好以便统一使用. 为了保证输出的html文本能被正确渲染,使用了@Html.Raw()方法,分页信息使用ViewBag从Controller传递过来,虽然ViewBag是动态类型,但用来传递分页信息还

Python学习之socket上传文件

#服务器 import socketserver,json,os class MyTCPHandler(socketserver.BaseRequestHandler): # handle() # 执行完就断开,处理和客户端的所有交互 def put(self,*args): #接受客户端文件 cmd_dic = args[0] # 传进来的是 字典cmd_dic # print(cmd_dic) # b'{"action": "put", "filena

[学习笔记]验证上传文件后缀名类型

<script type="text/javascript" charset="utf-8"> function checkFile(filename){ var flag = false; var arr = ["jpg","png","gif","bmp"]; //取扩展名: var index = filename.indexOf("."); var

SpringMVC 学习-上传文件分解器 CommonsMultipartResolver 类

Spring 组件 CommonsMultipartResolver 类的主要作用是配置文件上传的一些属性,也可以控制上传文件的大小. 在 springmvc-servlet.xml 配置文件中: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="d