2013-02-28 189 views
2

我有一个UIWebView从需要身份验证的Web服务器下载文件(PDF,Word,Excel)。为此,我已经处理了身份验证并根据Apple建议填充了一个NSMutableData对象。UIWebView和文件MIME类型

将数据加载到UIWebView时,我不想硬编码Mime类型,有关如何避免此问题的任何想法?

[_webView loadData:data MimeType: @"application/msword" textEncodingName: @"UTF-8" baseURL:[NSURL URLWithString: @""]]; 

试过以下,但总是 “text/html的” 返回:

- (void)connection:(NSURLConnection *)connection didRecieveResponse:(NSURLResponse *)response { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
    NSString *mimeType = [httpResponse MIMEType]; 
    NSLog(@"MIMETYPE: %@",mimeType); 
} 

响应头的位置:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 50176 
Content-Type: application/msword 
Expires: -1 
Server: Microsoft-IIS/7.5 
Content-Disposition: attachment; filename=test.doc 
X-AspNet-Version: 4.0.30319 
Persistent-Auth: true 
X-Powered-By: ASP.NET 

编辑: 一个奇怪的现象会发生的事情与标题。

我最初发布在Chrome和Fiddler2进行了核实,但NSURLConnection的实际接收的标题:

“的Content-Type”= “text/html的;字符集= US-ASCII,应用程序/ msword”;
“Content-Length”=“341,79360”;

以下代码段用于确认这一点:

- (void)connection:(NSURLConnection *)connection didRecieveResponse:(NSURLResponse *)response { 

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; 
    if ([response respondsToSelector:@selector(allHeaderFields)]) { 
     NSDictionary *dictionary = [httpResponse allHeaderFields]; 
    NSLog([dictionary description]); 
    } 
} 

任何想法,为什么它接收到这个无效的头,我难倒?

回答

0

如果它帮助别人,我无法找到IIS为什么要生成该特定头的答案,不得不为编码头编写一个小的解析器,以便在应用程序/头。

0

使用

[[httpReponse allHeaderFields] objectForKey:@"Content-Type"] isEqualToString:@"application/msword"] 

检查响应头。

可能是您错过了多次重定向在请求过程中发生的事实。

+0

好像它应该工作,但是这是行不通的:NSString的mime类型= [[类HTTPResponse allHeaderFields] objectForKey:@ “内涵式”] stringValue的]。 – ServerMonkey 2013-02-28 23:36:43

+0

那么你应该得到重定向,我想。请检查您的** - (NSURLRequest *)连接中的响应:(NSURLConnection *)连接willSendRequest:(NSURLRequest *)请求redirectResponse:(NSURLResponse *)响应**方法。 didReceiveResponse仅在有服务器发送响应时调用,其他委托方法负责程序流。 – CodeWeed 2013-03-01 00:33:36

0

在我的方式,以避免MIME类型:在connectionDidFinishLoading

[webView loadHTMLString:[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] baseURL:[[connection currentRequest] URL]]; 
+0

我认为这只适用于html,但不确定 – user2387149 2014-03-08 23:17:12