Ami*_*mit 12 ftp ios nsurlsession
我正在尝试通过FTP将文件上传到服务器.根据 Apple文档, NSURLSession类支持FTP操作.
有一个着名的Apple开发者博客,也支持这一点.但是还不清楚NSURLSession API是否支持ftp上传?(我尝试了建议的方式并得到错误).
使用传统的CFFTPStreamRef方式 ,ftp上传工作正常,但在9.0中已弃用.标题说:CF_DEPRECATED(10_3,10_11,2_0,9_0,"对ftp请求使用NSURLSessionAPI")
任何想法,示例或链接,以获得帮助.我现在正在尝试这样的事情:
NSURL *url_upload = [NSURL URLWithString:@"ftp://username:password@thelink/myfolder/filename.zip"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url_upload];
[request setHTTPMethod:@"PUT"];
NSURL *docsDirURL = [NSURL fileURLWithPath:filePath];
NSURLProtectionSpace * protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:url_upload.host port:[url_upload.port integerValue] protocol:url_upload.scheme realm:nil authenticationMethod:nil];
NSURLCredential *cred = [NSURLCredential
credentialWithUser:userId
password:password
persistence:NSURLCredentialPersistenceForSession];
NSURLCredentialStorage * cred_storage ;
[cred_storage setCredential:cred forProtectionSpace:protectionSpace];
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.URLCredentialStorage = cred_storage;
sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.timeoutIntervalForResource = 60.0;
sessionConfig.allowsCellularAccess = YES;
sessionConfig.HTTPMaximumConnectionsPerHost = 1;
NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionUploadTask *uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:docsDirURL];
[uploadTask resume];
Run Code Online (Sandbox Code Playgroud)
据我所知,NSURLSession(和NSURLConnection)支持通过FTP检索文件,但不支持其他任何FTP命令,例如STOR(请注意,PUT是HTTP方法,而不是FTP方法)。
为了您的目的,您可以选择使用CFFTPStream API(仅勉强可用)或停止使用FTP。
我的强烈建议是停止使用FTP。FTP协议是不安全的,它以明文形式通过网络发送用户名和密码,这使得人们真正容易地嗅探凭据并伪装成用户。因此,最近几天FTP上载甚至可以远程接受的唯一情况是匿名FTP上载到共享保管箱,即使这样,还是有些可疑的。这就是为什么从未将功能添加到NSURLConnection API的原因,更不用说NSURLSession了。
还有很多更好的替代方案,它们更加安全,例如通过HTTPS的WebDAV,通过HTTPS上载的POST请求,具有摘要身份验证的WebDAV或POST请求等。这些替代方案实际上受NSURLSession支持,并提供了诸如恢复功能的其他优势。下载。除非您绝对没有办法更改服务器端,否则请改用其中一种方法。