在OS X 10.9配置WebDAV服务器联合NSURLSessionUploadTask实现文件上传
iOS7推出的NSURLSession简化了NSURLConnection的文件上传和下载的工作,本文记录如何配置WebDAV服务以支持PUT方式的文件上传。
一. 配置WebDAV服务器
1. 修改httpd.conf
1> 打开终端,依次输入:
cd /etc/apache2/
sudo vi httpd.conf
2> 在vi中输入
查找httpd-dav.conf
3> 将该行最前面的 # 注释删除
4> 保存并退出
输入
2. 修改httpd-dav.conf
1> 在终端中依次输入:
cd /etc/apache2/extra
sudo vi httpd-dav.conf
2> 按照以下内容修改httpd-dav.conf中的内容
提示:仅修改了授权类型和用户密码文件两个位置
DavLockDB "/usr/var/DavLock"

Alias /uploads "/usr/uploads"

<directory "="" usr="" uploads"="">
     Dav On

     Order Allow,Deny
     Allow from all

     #用户的授权类型
     AuthType Basic
     AuthName DAV-upload

     # You can use the htdigest program to create the password database:
     # htdigest -c "/usr/user.passwd" DAV-upload admin
     # 用户密码文件
     AuthUserFile "/usr/webdav.passwd"
     AuthDigestProvider file

     # Allow universal read-access, but writes are restricted
     
      require user admin
     

说明:
按照上述配置文件,可以通过URL->http://localhost/uploads,将文件上传至/usr/uploads目录
上传文件所使用的用户名是:admin
3> 保存并退出
输入
3. 建立文件夹并配置文件
1> 创建admin的密码,在终端中输入:
sudo htpasswd -c /usr/webdav.passwd admin
然后输入admin的密码,密码文件会保存在/usr/webdav.passwd中
2> 设置webdav.passwd权限
sudo chgrp www /usr/webdav.passwd
3> 建立var文件夹,以保存DavLockDB相关文件
sudo mkdir -p /usr/var
sudo chown -R www:www /usr/var
4> 建立上传文件夹:uploads
sudo mkdir -p /usr/uploads
sudo chown -R www:www /usr/uploads
5> 重新启动Apache
sudo apachectl -k restart
4. 测试
打开Finder,在菜单中选择“前往"“连接服务器",在地址栏中输入:http://localhost/uploads
然后用户名admin及在终端设置的密码,连接至服务器,并测试更新文件。
二. 使用NSURLSessionUploadTask实现文件上传
- (IBAction)uploadFile
{
     // 要上传的文件
     UIImage *image = [UIImage imageNamed:@"123.jpg"];
     NSData *imageData = UIImageJPEGRepresentation(image, 1.0f);

     // 上传的文件名
     NSString *urlString = @"http://localhost/uploads/demo.jpg";
     urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

     NSURL *url = [NSURL URLWithString:urlString];
     NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
     // 使用PUT方法
     [request setHTTPMethod: @"PUT"];

     // 用户授权
     NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", @"admin", @"123"];
     NSString *authValue = [NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)];
     [request setValue:authValue forHTTPHeaderField:@"Authorization"];

     [request setHTTPBody: imageData];
     [request setValue:@"image/jpg" forHTTPHeaderField:@"Content-Type"];
     [request setValue:[NSString stringWithFormat:@"%d", [imageData length]] forHTTPHeaderField:@"Content-Length"];

     // URLSession
     NSURLSession *session = [NSURLSession sharedSession];
     // 上传任务
     NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
      
      if (!data) {
           NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
           NSLog(@"%@ %@", result, response);
      } else {
           NSLog(@"upload ok!");
      }
     }];

     [task resume];
}
另外,还需要一个对字符串进行Base64编码的方法,代码如下:
static NSString *AFBase64EncodedStringFromString(NSString *string)
{
     NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
     NSUInteger length = [data length];
     NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4];

     uint8_t *input = (uint8_t *)[data bytes];
     uint8_t *output = (uint8_t *)[mutableData mutableBytes];

     for (NSUInteger i = 0; i < length; i += 3) {
      NSUInteger value = 0;
      for (NSUInteger j = i; j < (i + 3); j++) {
           value <<= 8;
           if (j < length) {
                value |= (0xFF & input[j]);
           }
      }
      
      static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
      
      NSUInteger idx = (i / 3) * 4;
      output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F];
      output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F];
      output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '=';
      output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '=';
     }

     return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding];
}

© chenyilong. Powered by Postach.io

在OS X 10.9配置WebDAV服务器联合NSURLSessionUploa…的更多相关文章

  1. 在OS X 10.9配置WebDAV服务器联合NSURLSessionUploadTask实现文件上传

    iOS7推出的NSURLSession简化了NSURLConnection的文件上传和下载的工作,本文记录如何配置WebDAV服务以支持PUT方式的文件上传. 一. 配置WebDAV服务器 1. 修改 ...

  2. suse linux 10 下配置vpn服务器(pptp)

     一.安装所需的软件包:      pptpd-*.rpm      ppp-*.rpm      pptp-*.rpm     一般情况下系统已经将pptp和ppp包安装好了,所以只需安装pptpd ...

  3. 〖Linux〗Ubuntu13.10,配置tftp服务器

    前言,配置了好久没有发现老是出问题tftp: server error: (2) Access violation,一般侦测之后... 1. 安装软件包:apt-getsudo apt-get ins ...

  4. Mac OS 10.8 配置SVN服务器

    Mac 10.8开始,不再默认安装svn,需要自行安装 如果您安装了XCode,会随同安装svn 更省事的办法: 1.安装homebrew,看看官网 http://brew.sh/index_zh-c ...

  5. Mac OS X上安装配置apache服务器

    说明:Mac在安装完成Mac系统的时候它已经自带了apache服务器,接下来就是配置和将它启动运行了.那么接下来要做的事情就是: 1.配置apache的配置文件 2.设置虚拟主机 启动并查看apach ...

  6. Apache+PHP+Mysql OS X 10.9 Mavericks WEB 服务器配置

    在 OS X 10.9 上基本没有什么特别大的差异. 为了新系统用户方便小弟重新整理了一下,因为在 OSX 10.9 下的 Server 软件进行了不少升级,有些步骤不太一样了. 硬件方面就不在详细描 ...

  7. 阿帕奇apache服务器和webDav服务器快速配置。

    当自己在家敲代码需要发请求时,就可以配置本地apache,Mac电脑自带的服务器.这个比windows上的本地服务器还要好用,下面写下最快速配置方案. 0.在开始之前需要给自己的电脑设置下开机密码,想 ...

  8. Mac下Apache服务器和webDav服务器快速配置

    当自己在家敲代码需要发请求时,就可以配置本地Apache,Mac电脑自带的服务器.这个比windows上的本地服务器还要好用,下面写下最快速配置方案. 0.在开始之前需要给自己的电脑设置下开机密码,想 ...

  9. 在Mac OS X 10.8中配置Apache + PHP + MySQL

    在Mac OS X 10.8中配置Apache+PHP+MySQL的内容包括: 配置Apache 配置PHP 安装MySQL 配置PHPAdmin 设置数据库默认字符集 一. 配置Apache 1. ...

随机推荐

  1. [翻译]:Artificial Intelligence for games 5.3 STATE MACHINES:状态机

    目录 Chapter 5 Decision Making 5.3 STATE MACHINES:状态机 Chapter 5 Decision Making 5.3 STATE MACHINES:状态机 ...

  2. PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法

    贪心算法 次数最少的方法,即:1.每次都将0与应该放置在0位置的数字交换即可.2.如果0处在自己位置上,那么随便与一个不处在自己位置上的数交换,重复上一步即可.拿样例举例:   0 1 2 3 4 5 ...

  3. linux内核分析第二周

    网易云课堂linux内核分析第二周 20135103                王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  4. 《Linux内核分析》第二周学习报告

    <Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡  学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 ...

  5. week2--操作系统是如何工作的

    潘恒   原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.一个简单的时间 ...

  6. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

  7. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  8. ElasticSearch 2 (37) - 信息聚合系列之内存与延时

    ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...

  9. 关于C++内联函数

    关于C++内联函数有以下实验: 有三段测试代码 1.手动展开内联函数. 2.非内联函数. 3.inline标记的内联函数.(函数只有一行代码,以确保函数被内联) 测试三种情况: VS工程在Releas ...

  10. oracle 查看临时表空间temp 的使用情况以及扩展表空间

    SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS, USED_SPACE )/SPACE*,) &qu ...