2013-11-21 55 views
2

我已經創建,創建應該返回到iOS應用程序的文本文件一個PHP服務器,與它溝通,但我有一些尚未解決的問題:從PHP服務器接收文本文件到iOS應用

  1. 如何我可以返回使用PHP在服務器端創建的文本文件嗎?
  2. 如何接收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

你可以簡單地創建和PHP主機文本文件。在您的web服務的響應只是給它URL

現在,您可以從文本文件中把內容

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]; 
+0

感謝您的回覆,但是如何使用HTTPREQUEST中定義的響應而不使用您以上寫過的方式? – user2960510

2

建議下載文件

簡答題

如何返回使用PHP在服務器端創建的文本文件?

使用從URL中提取文件的基礎對象。 Php正在完成繁重的工作以生成文件。您只需將其存入網絡可訪問的位置即可。如果擔心安全問題,您需要深入瞭解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可以將文本文件存放到可訪問的網頁文件夾中。一旦你的文件在網絡訪問的地址創建,你可以考慮使用的... 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類參考的審查,對閱讀的興趣區間後並使用塊寫入。

其他考慮因素可能需要根據數據的敏感性來保護文件。這可能會影響您選擇實施的流程。

相關問題