【问题标题】:File Type from NSURL来自 NSURL 的文件类型
【发布时间】:2014-05-13 13:33:58
【问题描述】:

您好,我想从 iOS 中下载的文件中读取文件类型,该文件没有扩展名。

例如:http://somelink/2a3bc

它是一个有效的 pdf 文件。当我下载它时,它会在 url(NSURL) 处作为 NSData 流下载。如果我将其重命名为 2a3bc.pdf 它可以使用 UIDocumentInteractionController 进行预览,但是当我打开没有扩展名的 url 时,它不会将其识别为文件有效文件。 它的 UTI 变为 public.data

有什么方法可以从 NSData 读取文件类型并根据该文件重命名文件并使用 UIDocumentInteractionController 打开它。

问候, 南都艾哈迈德

【问题讨论】:

  • 响应头会告诉你内容类型吗?
  • 不,我已经使用 NSURLSessionDownloadTask 下载了它。响应头不存在
  • 发布您的代码。顺便说一句,可以获得响应标头 - 请参阅 stackoverflow.com/questions/19547897/…
  • 是的,我现在可以得到回复。如何将内容类型更改为 UTI 或扩展名。任何可用于将内容类型转换为 UTI 或扩展名的方法
  • 谢谢,我可以读取文件属性NSString *suggestedFileName = [downloadTask.response suggestedFilename]; CFStringRef mimeType = (CFStringRef)ContentTypeKey; CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL); CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);

标签: ios nsurl file-extension


【解决方案1】:

您的下载任务有一个指向作为下载的一部分收到的NSURLResponse *response 的链接。这包含为下载设置的MIMEType。您应该使用它来确定文件类型是什么。

从技术上讲,您可以读取下载文件中数据的前几个字节,但您需要大量代码来比较和识别所有字节序列...

【讨论】:

  • 谢谢,但我的回复是nil
  • 我没有得到 MIME 类型的响应 <NSHTTPURLResponse: 0xc5f8260> { URL: https://abc/def/v1.1/files/filename } { status code: 200, headers { Connection = "Keep-Alive"; "Content-Length" = 136247; "Content-Type" = "application/zip"; Date = "Wed, 02 Apr 2014 10:43:26 GMT"; "Keep-Alive" = "timeout=120, max=500"; } }
  • 所以你有它,它说数据类型是zip。所以,如果都是zip,你需要从服务器获取一些其他信息(比如一个好的文件名)或分析文件字节(你需要源信息来匹配字节)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2021-02-08
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多