2

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

将数据加载到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;charset=us-ascii,application/msword";
"内容长度" = "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]);
    }
}

知道为什么它会收到这个无效的标题,我很难过?

4

3 回答 3

0

我避免 mime 类型的方法:在 connectionDidFinishLoading

[webView loadHTMLString:[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] baseURL:[[connection currentRequest] URL]];
于 2014-03-08T23:16:37.743 回答
0

如果它对其他人有帮助,我无法找到关于 IIS 生成该特定标头的原因的答案,因此必须为标头编写一个小型解析器,以便在应用程序/标头存在的情况下忽略 text/html。

于 2013-03-07T23:28:04.383 回答
0

使用

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

检查响应头。

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

于 2013-02-28T09:35:30.260 回答