UIWebView和文件MIME类型
我有一个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]);
}
}
任何想法,为什么它接收到这个无效的头,我难倒?
如果它帮助别人,我无法找到IIS为什么要生成该特定头的答案,不得不为编码头编写一个小的解析器,以便在应用程序/头。
使用
[[httpReponse allHeaderFields] objectForKey:@"Content-Type"] isEqualToString:@"application/msword"]
检查响应头。
可能是您错过了多次重定向在请求过程中发生的事实。
在我的方式,以避免MIME类型:在connectionDidFinishLoading
[webView loadHTMLString:[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] baseURL:[[connection currentRequest] URL]];
我认为这只适用于html,但不确定 – user2387149 2014-03-08 23:17:12
好像它应该工作,但是这是行不通的:NSString的mime类型= [[类HTTPResponse allHeaderFields] objectForKey:@ “内涵式”] stringValue的]。 – ServerMonkey 2013-02-28 23:36:43
那么你应该得到重定向,我想。请检查您的** - (NSURLRequest *)连接中的响应:(NSURLConnection *)连接willSendRequest:(NSURLRequest *)请求redirectResponse:(NSURLResponse *)响应**方法。 didReceiveResponse仅在有服务器发送响应时调用,其他委托方法负责程序流。 – CodeWeed 2013-03-01 00:33:36