以PUT方式上传文件至WebDav
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"执行");
[self putUpload];
}
#pragma mark - <上传演练>
-(void)putUpload{
//1.url - URL是直接保存在服务器上的文件名
NSURL * url = [NSURL URLWithString:@"http://192.168.31.180/uploads/123.png"];
//2.请求
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
//设置请求方法-webdav上传需要使用put方法
request.HTTPMethod = @"PUT";
//设置身份验证的数据
NSString * authStr = [self base64Encode:@"admin:123456"];
authStr = [@"BASIC " stringByAppendingString:authStr];
//设置请求头
[request setValue:authStr forHTTPHeaderField:@"Authorization"];
//3.session
//上传的源文件的路径!!
NSURL * fileUrl = [[NSBundle mainBundle] URLForResource:@"456.png" withExtension:nil];
[[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:fileUrl completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@ %@",str,response);
NSLog(@"%@",error);
}] resume];
}
-(NSString *)base64Encode:(NSString *)str{
//1.转成二进制
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
//2.base64编码
return [data base64EncodedStringWithOptions:0];
}
@end
注意:在做request请求前,需要把之前设置的用户名和密码以特定格式进行base64编码,并设置
WebDav 的用户名密码格式
格式:BASIC(用户名:密码)base64编码
admin:123456
base64经常用!而且在密码学里面必须会
对一个二进制数据进行编码 会是源文件的 4/3 的大小 会大1/3 左右!!
从iOS 7.0开始.苹果提供了base64 的编码和解码的支持!!
如果是老项目,可能会看到base64的三方框架