我正在尝试使用FTP服务器。 我已经搜索了所有内容,对于像我这样的初学者来说,一切都很难理解。 SimpleFTPSample很难理解,因为它一次很多。视图,按钮,标签,textflelds,上传,下载,请求,列表,获取。与BlackRaccoon和其他一切相同。
如何简单且可编程地将“test.txt”上传到FTP服务器:Xcode(iPhone应用程序)中的“192.168.1.111”,没有视图或按钮。只是代码可以在ViewDidLoad中。例如。
也许是这样的?:
NSURL* url = [NSURL URLWithString:@"ftp://username:pw@189.92.32.34"];
CFReadStreamRef stream = CFReadStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url);
stream.delegate= self;
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[stream open];
但是哪个档案? 展开它,或编写新代码。我不知道,这对我来说是新的。
感谢Jonathan
答案 0 :(得分:6)
作为Black Raccoon的作者或许我有偏见(好吧,我知道我有偏见),但我试图让它变得尽可能简单和强大。让我们看看你想做什么,上传一个文件:
我们需要上传文件的四件事 - 启动代码,然后是四个委托方法:覆盖检查,数据,成功和失败。假设您将整个文件读入内存(对于小于2兆的小文件,可以。)
首先,在标题中需要这个:
BRRequestUpload *uploadData; // Black Raccoon's upload object
NSData *uploadData; // data we plan to upload
现在代码部分:
- (IBAction) uploadFile :(id)sender
{
//----- get the file path for the item we want to upload
NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filepath = [NSString stringWithFormat: @"%@/%@", applicationDocumentsDir, @"file.text"];
//----- read the entire file into memory (small files only)
uploadData = [NSData dataWithContentsOfFile: filepath];
//----- create our upload object
uploadFile = [[BRRequestUpload alloc] initWithDelegate: self];
//----- for anonymous login just leave the username and password nil
uploadFile.path = @"/home/user/myfile.txt";
uploadFile.hostname = @"192.168.1.100";
uploadFile.username = @"yourusername";
uploadFile.password = @"yourpassword";
//----- we start the request
[uploadFile start];
}
如果要覆盖现有文件,第一个将询问您的代码。
-(BOOL) shouldOverwriteFileWithRequest: (BRRequest *) request
{
//----- set this as appropriate if you want the file to be overwritten
if (request == uploadFile)
{
//----- if uploading a file, we set it to YES (if set to NO, nothing happens)
return YES;
}
}
接下来,Black Raccoon将要求您提供要发送的数据块。如果你有一个非常大的文件,你永远不想尝试一次性发送它 - Apple的API将扼杀和丢弃数据。但是,我们只有一个小块,所以我们这样做:
- (NSData *) requestDataToSend: (BRRequestUpload *) request
{
//----- returns data object or nil when complete
//----- basically, first time we return the pointer to the NSData.
//----- and BR will upload the data.
//----- Second time we return nil which means no more data to send
NSData *temp = uploadData; // this is a shallow copy of the pointer
uploadData = nil; // next time around, return nil...
return temp;
}
请记住,我们可以仅为小文件执行此操作。
接下来我们有完成处理程序(如果按计划工作):
-(void) requestCompleted: (BRRequest *) request
{
if (request == uploadFile)
{
NSLog(@"%@ completed!", request);
uploadFile = nil;
}
}
最后我们有失败处理程序:
-(void) requestFailed:(BRRequest *) request
{
if (request == uploadFile)
{
NSLog(@"%@", request.error.message);
uploadFile = nil;
}
}
如果它像说[BRFtpUploadTo: dest srcfile: srcFile destfile: dstFile]
一样简单,那就太棒了,但有很多原因你不应该这样做。其中一部分与Apple如何实施其内部FTP有关。还有阻塞,错误等问题。最后,FTP听起来应该是微不足道的,但最终会成为一场噩梦。
FTP是非常重要的,这就是为什么有这么多的实现。我并不认为Black Raccoon是最好的,但是它会在几分钟到几天之间的问题上得到回应。
起初看起来可能令人生畏,但在我看来,Black Raccoon是更好的FTP库之一。我花了很多时间和精力使它成为一个高质量的产品,对问题的反应非常好。我该如何免费这样做?体积。 ;)
祝你最终得到的任何FTP软件好运!
答案 1 :(得分:0)
上传时需要上传路径。这就是FTP的工作方式。
该端口是标准的FTP端口。我知道在不违反API的情况下无法改变这一点。如果你搞清楚,你很有可能不通过Apple的支票。
此代码将上传/下载任何文件。
我不知道如何在安全的条件下完成这项工作。这使用Apple的FTP协议。还有其他FTP软件包从头开始构建,并且更加智能化。我会调查它们。
BR的设计是因为我需要简单的FTP通信。白浣熊没有为我这样做,因为当时(它已经现代化)。