iPhone应用程序和服务器之间的图像传输

时间:2011-09-02 11:55:29

标签: iphone sdk

有许多种解析方法,如NSXML,JSON等。 我对这么多方法很困惑。所以请帮助我选择他们。 如果必须从iPhone应用程序中检索图像并将其上传到远程服务器,这将是最好的解析方法吗?

3 个答案:

答案 0 :(得分:0)

  1. 使用XML来检索图像列表。(将其存储在服务器上或从Web服务获取)
  2. 使用NSXmlParser解析并获取图片网址。
  3. 用它来获取图像。 [NSData dataWithContentsOfURL:<#(NSURL *)url#>] 要么 使用以下。

     NSURL *url = [NSURL URLWithString:[fileUrl
    stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    [theRequest setHTTPMethod:@"POST"];
    
    webData = [[NSMutableData alloc] init];
    
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest    
    delegate:self startImmediately:YES];
    
  4. 或SOAP代码

        NSURL *url = [NSURL URLWithString:@"<URL>"];
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
        theRequest = [NSMutableURLRequest requestWithURL:url];
        NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
        [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content- Type"];
        [theRequest addValue: @"<ADD Value Here>" forHTTPHeaderField:@"SOAPAction"];
        [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
        [theRequest setHTTPMethod:@"POST"];
        [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
        NSURLConnection theConnection = [[NSURLConnection alloc] initWithRequest:theRequest 
        delegate:self startImmediately:YES];
    

    在上面,如果您将文件的URL作为请求传递给某个Web服务,它返回带有绑定文件数据的XML,然后通过NSXmlParser解析它,并在下面的方法中将数据写入文件中。

    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    如果您需要任何进一步的帮助,请写在这里。

答案 1 :(得分:0)

通常来自服务器的信息将采用xml或JSON格式。

NSXML解析器解析xml数据,JSON解析器解析json数据。但图像不是xml或Json格式。图像将是必须从服务器下载的字节块。

通常,image url可以是xml或json数据的一部分,将使用适当的解析器进行解析。获得图像的url后,您将使用NSUrlConnection或ASIHttpRequest(库)下载图像。

答案 2 :(得分:0)

ASIHTTPRequest执行异步请求 JSON Framework将传入的JSON对象解析为本机数据对象(NSDictionaries和NSArrays) UIImage *myDownloadedImage = [UIImage imageWithData:[requestObject responseData]];将下载的图像数据转换为UIImage。

以下是我最近的一个项目的示例代码。我已加入ASIHTTPRequest.hJSON.h

NSString *projurl = [NSString stringWithFormat:@"%@mobile/project_details/?project=%@", WEBAPPURL, self.projectId];

__block ASIHTTPRequest *r = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:projurl]];
[r setCompletionBlock:^{
    self.projectData = [[r responseString] JSONValue];
    [self.tableView reloadData];
}];
[r startAsynchronous];

你可以在那个完成块中右转,挑选出与这个项目相关的图像URL,请求它们,处理嵌套在第一个内部的另一个完成块内的响应...... ASI新的面向块的结果处理的美感是因为它可以在一个地方发生,你不必为正式的委托模式细节而烦恼。

您可以在startAsynchronous调用之前设置一个“加载”UI元素,如果需要,可以在completionBlock中删除它。