zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

IOS开发教程之put上传文件的服务器的配置及实例分享

2023-06-13 09:15:27 时间

1,HTTP常见的方法

GET获取指定资源

POST2M向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源HEAD获取指定资源头部信息
PUT替换指定资源(不支持浏览器操作)
DELETE删除指定资源

2,配置服务器的put请求方式:

复制代码代码如下:

 1>

n打开终端
pcd/etc/apache2
psudovimhttpd.conf

n在vim中输入
p/httpd-dav.conf
•查找httpd-dav.conf
p按0将光标移动至行首p按x将行首的#删除
p输入:wq,保存并退出
 2>

在终端继续输入
 cd/etc/apache2/extra
 sudovimhttpd-dav.conf

 在vim中将右图中第一处标红位置的Digest修改为Basic

 输入:wq,保存并退出

 提示:

 修改的是用户授权的方式

 第二处标红位置是保存用户密码的文件(/user/user.passwd)

 第三处标红位置是能够使用PUT请求的用户名(admin)

 4>

在终端输入pcd/usr

 sudohtpasswd-c/usr/user.passwdadmin

 ls-l

 sudochgrpwww/usr/user.passwd

 ls-l

 5>
建立var文件夹,保存DavLockDB相关文件nsudomkdir-p/usr/var
 sudochown-Rwww:www/usr/var

 建立上传文件夹:uploads
 sudomkdir-p/usr/uploads
 sudochown-Rwww:www/usr/uploads

 重新启动Apache
 sudoapachectl-krestart

  6>当看到这个时就表示配置正确

 修改后用ls-l查看的示意图如下
 如果能看到这三个就表示配置正确
     uploads
     user.passwd
     var

实例:

复制代码代码如下:


#import"KUViewController.h"
#import"KUProgress.h"
@interfaceKUViewController()<NSURLSessionTaskDelegate>
//下载进度的类,继承UIview
@property(weak,nonatomic)IBOutlet KUProgress*progressView;

@end

@implementationKUViewController

-(void)viewDidLoad
{
   [superviewDidLoad];
//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.
   [selfputFile];
}

/**
 * 用PUT方法上传文件,不经过浏览器传递
 */
-(void)putFile
{
  //1,url(协议+主机名+路径+保存到服务器的文件名)
    //post:url (协议+主机名+上传的服务器的程序)
   NSString*urlStr=@"http://localhost/uploads/046.Post提交用户隐私数据&MD5加密.mp4";
     //1.1编码格式
   urlStr=[urlStrstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
   NSURL*url=[NSURLURLWithString:urlStr];

   //2,request请求(默认是get)
   NSMutableURLRequest*request=[NSMutableURLRequestrequestWithURL:url];
     //1>httpMethod
   request.HTTPMethod=@"PUT";
     //2>网络请求授权
   /**
       BASE64目前在网络上最流行的一种编码方式,可以将二进制的数据转换成字符串,对方接受到之后,可以再讲字符串转换成二进制文件
       BASE64可以编码,也可以解码

     授权格式:
     (1)授权字符串格式:用户名:口令
     (2)授权模式:BasicBase64编码的授权字符串
     (3)位HTTPHEADERField的Authorization赋值

    */
   NSString*authStr=@"admin:admin";
   //将字符串转换成Base64
    authStr=[selfauthBase64:authStr];
   //转换成第二部的
   NSString*authBase64=[NSStringstringWithFormat:@"Basic%@",authStr];
   //转换成第三部
   [requestsetValue:authBase64forHTTPHeaderField:@"Authorization"];

   //3,session
     //1>.创建会话机制
   NSURLSessionConfiguration*config=[NSURLSessionConfigurationdefaultSessionConfiguration];
 NSURLSession*session= [NSURLSessionsessionWithConfiguration:configdelegate:selfdelegateQueue:[[NSOperationQueuealloc]init]];

   //2>上传任务
   //上传的文件的路径
   NSURL*fileUrl=  [[NSBundlemainBundle]URLForResource:@"01.Post提交用户隐私数据&MD5加密.mp4"withExtension:nil];
   [[sessionuploadTaskWithRequest:requestfromFile:fileUrl]resume];

//  这是不用下载进度条的方法。
//   NSURLSessionUploadTask*task=[sessionuploadTaskWithRequest:requestfromFile:fileUrlcompletionHandler:^(NSData*data,NSURLResponse*response,NSError*error){
//       
//       //把二进制数据转换成字符串
//     NSString*str= [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
//       NSLog(@"str=%@",str);
//   }];
//

}

#pragmamark--代理方法

-(void)URLSession:(NSURLSession*)sessiontask:(NSURLSessionTask*)taskdidSendBodyData:(int64_t)bytesSenttotalBytesSent:(int64_t)totalBytesSenttotalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
   CGFloatvalue=(CGFloat)totalBytesSent/totalBytesExpectedToSend;
  //[NSThreadsleepForTimeInterval:0.2];
   [[NSOperationQueuemainQueue]addOperationWithBlock:^{
        self.progressView.progress=value;
   }];

   NSLog(@"下载进度;value=%.03lf",value);
}

-(void)URLSession:(NSURLSession*)sessiondidBecomeInvalidWithError:(NSError*)error
{
   NSLog(@"上传失败");
}
//转换成Base64编码授权字符串
-(NSString*)authBase64:(NSString*)authStr
{

   //将字符串转换成二进制数局
   NSData*data=[authStrdataUsingEncoding:NSUTF8StringEncoding];
   return[database64EncodedStringWithOptions:0];
}