我创建了一个php服务器来创建一个应该返回到iOS应用程序的文本文件,该应用程序与之通信但是我有一些未解决的问题:
我已经定义了这段代码:
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *result = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
这里的数据是应该从服务器返回的结果,但我该如何实现呢?
这是我的php文件代码:
$za = new ZipArchive();
$za->open('/Applications/XAMPP/xamppfiles/temp/test.zip');
$fp = fopen ('/Applications/XAMPP/xamppfiles/temp/myText.txt',"wb");
for( $i = 0; $i < $za->numFiles; $i++ ){
$stat = $za->statIndex( $i );
print_r( basename( $stat['name'] ) . PHP_EOL );
$content = basename( $stat['name'] ) . PHP_EOL ;
fwrite($fp,$content);
}
fclose($fp);
答案 0 :(得分:2)
<强>建议强>
简短答案
如何使用PHP返回在服务器端创建的文本文件?
使用从URL中提取文件的基础对象。 Php正在完成繁重的工作以生成文件。您只需将其存放在可访问Web的位置即可。如果担心安全问题,您将需要深入了解Secure Transport Reference中的各种选项(如果需要,还可以搜索ssl上的问题搜索堆栈溢出)。
如何在ios应用程序端接收文件?
基本上选择一个基础对象然后使用它的writeToFile方法(详细信息显示在详细信息下)。扩展使用NSURLConnectionDelegate协议或NSURLSession类(请参阅有关向会话添加下载任务的部分 - 需要iOS7 +)。
<强>样品强>
如果您想继续使用字符串来移动数据,可能需要查看字符串编程指南(link)中的示例:
示例包含创建字符串后您想要执行的关键任务:
NSURL *URL = ...;
NSString *string = ...;
NSError *error;
BOOL ok = [string writeToURL:URL atomically:YES
encoding:NSUnicodeStringEncoding error:&error];
if (!ok) {
// an error occurred
NSLog(@"Error writing file at %@\n%@",
path, [error localizedFailureReason]);
// implementation continues ...
<强>详情
您可以使用Web服务器的内置功能来支持文件分发。因此,在这种情况下,Php可以将文本文件存放到Web可访问文件夹中。一旦您的文件在Web可访问的地址中创建,您可以考虑使用... withContentsOfURL方法之一,该方法可以将文件转换为某种可用的数据对象...
//transform file contents into array
NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]];
或
//transform file contents into nsdata
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]];
或
//transform file contents into dictionary
NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]]
如果您希望将文件下载到系统中(然后在本地处理它),则可以转换使用writeToFile方法创建的对象。在这种情况下,我建议你使用NSData来检索文件,然后你可以使用以下命令将该文件保存到本地目录中:
//use this instance method on the NSData object
- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
最后,如果您使用的是iOS7,还可以将整个过程包装到NSURLSessionDataTask中。这将允许您以异步方式执行任务(有关详细信息,请参阅类参考)。
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
甚至还有一种方法可以在CIImage类上使用此方法将内容转换为图像。
+ (CIImage *)imageWithContentsOfURL:(NSURL *)url options:(NSDictionary *)d
需要考虑的其他因素
您可能还希望在下载文件后使用该文件,我建议您查看NSFileHandle类参考,其中包含有关使用块进行读写的有趣部分。
其他考虑因素可能需要根据数据的敏感性来保护文件。这可能会影响您选择实施的流程。
答案 1 :(得分:0)
您可以简单地从php创建和托管文本文件。在您的网络服务响应中,只需发送网址
即可现在您可以从该文本文件中获取内容
NSString *strFileContent = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.puzzlers.org/pub/wordlists/pocket.txt"] encoding:NSUTF8StringEncoding error:nil ];
或者您可以使用 ASIHTTPRequest
下载文件ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/path/to/my_file.txt"];
[request startSynchronous];