2013-09-28 2 views
1

현재 응용 프로그램에서는 서버에서 파일을 거의 다운로드하지 않고 로컬로 저장합니다.확장명이없는 파일의 확장자 확인

파일 확장명에 따라 적절한보기로 파일을로드 중입니다.

예 :

  1. 파일 확장자 : MOV, 3GP, M4A 등 => 미디어 플레이어에서 디스플레이.
  2. 확장자 : rtf, pptx, numbers 등 = UIWebView에 표시됩니다.
  3. 파일 확장자 : gif, png, xbm 등, => UIImageView에 표시됩니다.

문제 : 다운로드 한 파일 중 일부에 확장명이 없을 수 있습니다.

내가 찾은 한 가지 접근법은 connectionDidFinishLoading이 응답에서 MIMEType을 얻고 그로부터 파일 확장명을 가져 오는 것입니다. 나도 같은를 들어, 이하의 코드 사용 :

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    CFStringRef mimeType = (__bridge CFStringRef)[_respo MIMEType]; 
    CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL); 
    CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension); 
    NSString *fileName = [NSString stringWithFormat:@"%@.%@", [[_respo suggestedFilename] stringByDeletingPathExtension], (__bridge NSString *)extension]; 
    [[NSFileManager defaultManager] createFileAtPath:[[self docsDir] stringByAppendingPathComponent:[NSString stringWithFormat:@"Downloads/%@", fileName]] contents:_downloadedData attributes:nil]; 
} 

지금 내 질문은 :

  1. 확장하지 않고 파일에 대한 파일 확장자를 식별하는 다른 방법이 있나요이있는 NSData 객체에서 말을?

  2. 파일 확장명을 확인하는 대신 적절한보기로 파일을 표시하는 다른 방법이 있습니까?

좋습니다.

+0

모든 파일이'QLPreviewController'를 사용하는 것이 가장 쉽습니다. 그런 다음 파일 확장명 및 파일 형식에 대해 작업 할 필요가 없으며 사용자는 모든 파일에 대해 일관된 사용자 환경을 확보 할 수 있습니다. – rmaddy

답변

0

이 작업을 수행하는 일반적인 목적이 아닌 C 방법은 파일의 "마법"부분을 찾아/추측/추정하여 MIME 유형을 추정하는 file 명령을 사용하는 것입니다.

그것은 너무 기능이 당신에게 얼마나 가치가 있는지에 따라, C로 작성, 당신은 잠재적으로 그것을 통합 할 수

출처 : http://darwinsys.com/file/ 남자 페이지 :. 다른 방법으로 http://www.openbsd.org/cgi-bin/man.cgi?query=file&apropos=0&sektion=1

+0

Thnx :-) iOS에서도 작동합니까? – Devarshi

+0

모르겠지만 어떤 이유인지 알지 못합니다. –

+0

좋아 .. 다시 한번 thnx :) – Devarshi

0

- 수 다운로드하는 데 사용하는 연결의 Content-type 헤더를 단순히 보지 않습니까? 서버가 MIME 형식을 알고 있으면 좋은 해결책 인 것 같습니다. (서버가 MIME 유형을 알지 못하더라도 제어 할 수 있다면 : http://httpd.apache.org/docs/2.2/mod/mod_mime_magic.html 또는 그와 동등한 것을 설치하십시오.)

관련 문제