我创建了一个 php 服务器,它创建一个文本文件,该文件应该返回到 iOS 应用程序,并与之通信,但我有一些 Unresolved 问题:
- 如何返回使用 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);
最佳答案
推荐
简短回答
如何返回使用 PHP 在服务器端创建的文本文件?
使用从 URL 提取文件的基础对象。繁重的工作由 Php 完成来生成文件。您只需将其存入可通过网络访问的位置即可。如果安全性是一个问题,您将需要更深入地了解 Secure Transport Reference 中的各种选项。 (如果需要,还可以在堆栈溢出中搜索 ssl 的问题)。
ios app端如何接收文件?
基本上选择一个基础对象,然后使用它的 writeToFile 方法(详细信息下显示的示例)。 NSURLConnectionDelegate的扩展使用协议(protocol)或 NSURLSession类(请参阅向 session 添加下载任务部分 - 需要 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
最后,你还可以将整个流程包装成一个NSURLSessionDataTask如果您使用的是iOS7。这将允许您以异步方式执行任务(有关详细信息,请参阅类引用)。
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
甚至有一种方法可以使用 CIImage 类上的此方法将内容转换为图像。
+ (CIImage *)imageWithContentsOfURL:(NSURL *)url options:(NSDictionary *)d
需要考虑的其他因素
您可能还想在下载后使用该文件,我建议您查看 NSFileHandle类引用中有一个关于使用 block 读取和写入的有趣部分。
其他考虑因素是可能需要根据数据的敏感性来保护文件。这可能会影响您选择实现的流程。
关于php - 从 php 服务器接收文本文件到 ios 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120130/