IOS开发教程之put上传文件的服务器的配置及实例分享
1,http常见的方法
get 获取指定资源
post 2m 向指定资源提交数据进行处理请求,在restful风格中用于新增资源 head 获取指定资源头部信息
put 替换指定资源(不支持浏览器操作)
delete 删除指定资源
2,配置服务器的put请求方式:
1>
n 打开终端
p cd /etc/apache2
p sudo vim httpd.conf
n 在vim中输入
p /httpd-dav.conf
• 查找httpd-dav.conf
p 按0将光标移动至行首 p 按x将行首的#删除
p 输入:wq,保存并退出
2>
在终端继续输入
cd /etc/apache2/extra
sudo vim httpd-dav.conf
在vim中将右图中第一处标红位置 的digest修改为basic
输入:wq,保存并退出
提示:
修改的是用户授权的方式
第二处标红位置是保存用户密码 的文件(/user/user.passwd)
第三处标红位置是能够使 用put请求的用户名(admin)
4>
在终端输入 p cd /usr
sudo htpasswd -c /usr/user.passwd admin
ls-l
sudo chgrp www /usr/user.passwd
ls-l
5>
建立var文件夹,保存davlockdb相关文件 n sudo mkdir -p /usr/var
sudo chown -r www:www /usr/var
建立上传文件夹:uploads
sudo mkdir -p /usr/uploads
sudo chown -r www:www /usr/uploads
重新启动apache
sudo apachectl -k restart
6>当看到这个时就表示配置正确
修改后用ls -l查看的示意图如下
如果能看到这三个就表示配置正确
uploads
user.passwd
var
实例:
#import "kuviewcontroller.h"
#import "kuprogress.h"
@interfacekuviewcontroller ()<nsurlsessiontaskdelegate>
//下载进度的类,继承uiview
@property (weak, nonatomic) iboutlet kuprogress *progressview;
@end
@implementation kuviewcontroller
- (void)viewdidload
{
[superviewdidload];
// do any additional setup after loading the view, typically from a nib.
[self putfile];
}
/**
* 用put方法上传文件,不经过浏览器传递
*/
-(void)putfile
{
//1,url(协议+主机名+路径+保存到服务器的文件名)
// post:url (协议+主机名+上传的服务器的程序)
nsstring *urlstr = @"http://localhost/uploads/046.post提交用户隐私数据&md5加密.mp4";
//1.1编码格式
urlstr = [urlstr stringbyaddingpercentescapesusingencoding:nsutf8stringencoding];
nsurl *url = [nsurl urlwithstring:urlstr];
//2,request 请求(默认是get)
nsmutableurlrequest *request = [nsmutableurlrequestrequestwithurl:url];
//1>httpmethod
request.httpmethod = @"put";
//2>网络请求授权
/**
base64目前在网络上最流行的一种编码方式,可以将二进制的数据转换成字符串,对方接受到之后,可以再讲字符串转换成二进制文件
base64可以编码,也可以解码
授权格式:
(1)授权字符串格式:用户名:口令
(2)授权模式:basic base64编码的授权字符串
(3)位httpheaderfield的authorization赋值
*/
nsstring *authstr = @"admin:admin";
//将字符串转换成 base64
authstr = [self authbase64:authstr];
//转换成第二部的
nsstring *authbase64 = [nsstring stringwithformat:@"basic %@",authstr];
//转换成第三部
[request setvalue:authbase64 forhttpheaderfield:@"authorization"];
//3,session
//1>.创建会话机制
nsurlsessionconfiguration *config = [nsurlsessionconfigurationdefaultsessionconfiguration];
nsurlsession *session = [nsurlsessionsessionwithconfiguration:config delegate:selfdelegatequeue:[[nsoperationqueuealloc] init]];
//2> 上传任务
//上传的文件的路径
nsurl *fileurl = [[nsbundle mainbundle] urlforresource:@"01.post提交用户隐私数据&md5加密.mp4" withextension:nil];
[[session uploadtaskwithrequest:request fromfile:fileurl] resume];
// 这是不用下载进度条的方法。
// nsurlsessionuploadtask *task = [session uploadtaskwithrequest:request fromfile:fileurl completionhandler:^(nsdata *data, nsurlresponse *response, nserror *error) {
//
// //把二进制数据转换成字符串
// nsstring *str = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding];
// nslog(@"str = %@",str);
// }];
//
}
#pragma mark -- 代理方法
-(void)urlsession:(nsurlsession *)session task:(nsurlsessiontask *)task didsendbodydata:(int64_t)bytessent totalbytessent:(int64_t)totalbytessent totalbytesexpectedtosend:(int64_t)totalbytesexpectedtosend
{
cgfloat value = (cgfloat)totalbytessent / totalbytesexpectedtosend;
// [nsthread sleepfortimeinterval:0.2];
[[nsoperationqueuemainqueue] addoperationwithblock:^{
self.progressview.progress = value;
}];
nslog(@"下载进度;value = %.03lf",value);
}
-(void)urlsession:(nsurlsession *)session didbecomeinvalidwitherror:(nserror *)error
{
nslog(@"上传失败");
}
//转换成base64编码授权字符串
-(nsstring *)authbase64:(nsstring *)authstr
{
//将字符串转换成二进制数局
nsdata *data = [authstr datausingencoding:nsutf8stringencoding];
return [data base64encodedstringwithoptions:0];
}