从 NSURL 检测文件类型
Detect file type from NSURL
我有包含不同网站的 NSURL 变量 links.I 想要检测包含此文件的类型 link(如果它包含任何文件)。
在示例中,这是 pdf 文件:https://vk.com/doc-105831417_445462965
我如何在代码中检测到这是 PDF 文件或其他类型的文件(例如 ZIP、doc)?
我有这段代码,但它只适用于硬件上的文件:
CFStringRef fileExtension = (__bridge CFStringRef) [filePath pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
if([self ifZip:filePath]){
return ACFileTypeZIP;
}
if (UTTypeConformsTo(fileUTI, kUTTypeMovie)){
return ACFileTypeZIP;
}else if (UTTypeConformsTo(fileUTI, kUTTypePDF)){
return ACFileTypeDocument;
}else if (UTTypeConformsTo(fileUTI, kUTTypeImage)){
return ACFileTypeImage;
}else if (UTTypeConformsTo(fileUTI, kUTTypeAudio)){
return ACFileTypeAudio;
}
CFRelease(fileUTI);
注意 ACFileType 是我的枚举 types.ifZip 是我检测 zip 文件的方法:
-(BOOL)ifZip:(NSString*)path{
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *data = [fh readDataOfLength:4];
if ([data length] == 4) {
const char *bytes = [data bytes];
if (bytes[0] == 'P' && bytes[1] == 'K' && bytes[2] == 3 && bytes[3] == 4) {
return YES;
}
}
return NO;}
我认为它应该有效:
NSString *extension = [url pathExtension];
我有包含不同网站的 NSURL 变量 links.I 想要检测包含此文件的类型 link(如果它包含任何文件)。 在示例中,这是 pdf 文件:https://vk.com/doc-105831417_445462965 我如何在代码中检测到这是 PDF 文件或其他类型的文件(例如 ZIP、doc)? 我有这段代码,但它只适用于硬件上的文件:
CFStringRef fileExtension = (__bridge CFStringRef) [filePath pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
if([self ifZip:filePath]){
return ACFileTypeZIP;
}
if (UTTypeConformsTo(fileUTI, kUTTypeMovie)){
return ACFileTypeZIP;
}else if (UTTypeConformsTo(fileUTI, kUTTypePDF)){
return ACFileTypeDocument;
}else if (UTTypeConformsTo(fileUTI, kUTTypeImage)){
return ACFileTypeImage;
}else if (UTTypeConformsTo(fileUTI, kUTTypeAudio)){
return ACFileTypeAudio;
}
CFRelease(fileUTI);
注意 ACFileType 是我的枚举 types.ifZip 是我检测 zip 文件的方法:
-(BOOL)ifZip:(NSString*)path{
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *data = [fh readDataOfLength:4];
if ([data length] == 4) {
const char *bytes = [data bytes];
if (bytes[0] == 'P' && bytes[1] == 'K' && bytes[2] == 3 && bytes[3] == 4) {
return YES;
}
}
return NO;}
我认为它应该有效:
NSString *extension = [url pathExtension];