如何获取下载的文件类型?

杰·夏尔马

我正在使用后台传输 API 来下载东西。所以我的查询非常简单,如何获取 HTML 或 MP4 等文件类型。

Sunteen Wu

撇开后台传输 API 不谈,我认为实际上您应该知道的第一个问题是“如何从下载 Uri 获取文件扩展名”。

为此,我们需要考虑有关“Uri”的几种情况。

  • 下载 Uri 确实有一个文件扩展名,例如:https://code.msdn.microsoft.com/windowsapps/Background-File-Downloader-a9946bc9/file/145559/1/BackgroundDownloader.zip. 在这种情况下,我们可以使用Path.GetExtension可以直接获取文件扩展名的方法。

  • 下载 Uri 有一个文件扩展名,但也有查询参数,例如:https://i.stack.imgur.com/7e3M5.jpg?s=328&g=1. 在这种情况下,在通过 获取扩展名后Path.GetExtension,我们需要通过获取子字符串或其他表达式来获取实际扩展名。

  • 下载 Uri 不包含文件扩展名。例如,https://channel9.msdn.com/Events/Build/2017/T6056/captions?f=webvtt&l=en在这种情况下,一般我们可以从http响应内容头的内容类型中获取MIME类型,然后映射对应的文件扩展名。

这是我在我这边测试的一个非常简单的演示,用于获取上述文件扩展名Uri

private async void btnuri_Click(object sender, RoutedEventArgs e)
{
    string ext;
    ext = await GetFileExtention("https://i.stack.imgur.com/7e3M5.jpg?s=328&g=1");
    System.Diagnostics.Debug.WriteLine(ext);
    ext = await GetFileExtention("https://channel9.msdn.com/Events/Build/2017/T6056/captions?f=webvtt&l=en");
    System.Diagnostics.Debug.WriteLine(ext);
    ext = await GetFileExtention("https://code.msdn.microsoft.com/windowsapps/Background-File-Downloader-a9946bc9/file/145559/1/BackgroundDownloader.zip");
    System.Diagnostics.Debug.WriteLine(ext); 
}

public async Task<String> GetFileExtention(string url)
{
    string ext = "";
    try
    {
        if (Path.HasExtension(url))
        {
            ext = Path.GetExtension(url);
            ext = ext.Contains('?') || ext.Contains('=') ? ext.Substring(0, ext.LastIndexOf("?")) : ext;
        }
        else
        {
            HttpClient client = new HttpClient();
            HttpResponseMessage response = await client.GetAsync(new Uri(url));
            IHttpContent res = response.Content;
            string ContentType = res.Headers["Content-Type"];
            string MimeType = ContentType.Substring(0, ContentType.LastIndexOf(";"));
            switch (MimeType)
            {
                case "text/plain":
                    ext = ".txt"; break;
                case "text/vtt":
                    ext = ".vtt"; break;      
                case "text/html":
                    ext = "html"; break;
                default:
                    ext = ".unknown"; break;
            }
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.ToString());
    }
    return ext;
}

关于demo我们需要注意的一点:

  • 如果您使用的是后台传输,则需要Content-TypeWindows.​Networking.​Background​Transfer.Response​Information对象中获取标头,而不是IHttpContent. 例如:

    private async Task HandleDownloadAsync(DownloadOperation download, bool start)
    {
      ... 
      ResponseInformation response = download.GetResponseInformation();
      var contenttype = response.Headers["Content-Type"]; 
    }
    
  • 我们列出了三个关于下载 Uri 的场景,但我们不确定您是否还有其他场景,您应该有其他方法来处理它们。

  • 由于Content-Type和 文件后缀由服务器提供,因此无法保证文件扩展名的结果
  • 我们没有列出所有的 MIME 类型映射,以上只是为了简单的测试。有关更多详细信息和更多 MIME 类型映射,您可以参考此线程此包

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AlamoFire:如何快速获取下载图像的文件大小?

来自分类Dev

重定向后如何通过wget获取下载的文件名

来自分类Dev

如何设置下载路径并获取下载路径?

来自分类Dev

如何设置下载路径并获取下载路径?

来自分类Dev

在vb.net中获取下载文件的大小

来自分类Dev

以 HTML 格式获取下载文件的版本信息

来自分类Dev

如何使用puppeteer获取下载流(缓冲区)?

来自分类Dev

如何从iOS中的路径读取下载文件

来自分类Dev

如何使用 Paffy 获取下载百分比和下载速度?

来自分类Dev

如何获取下拉值到.php文件

来自分类Dev

如何获取yum下载的文件?

来自分类Dev

从JMeter中的sampler响应中获取下载的文件名

来自分类Dev

Google Drive API (REST) - 获取下载、文件查看等....?? (是否可以??)

来自分类Dev

Vimeo:从API获取下载链接

来自分类Dev

如何获取文件类型?

来自分类Dev

使用熊猫读取下载的HTML文件

来自分类Dev

如何在Chrome扩展程序中获取下载页面的网址?

来自分类Dev

将照片上传到firebase存储后如何获取下载链接

来自分类Dev

Unity- 将图像上传到 Firebase 存储后如何获取下载 URL?

来自分类Dev

下载前如何获取文件大小

来自分类Dev

如何以文件形式下载获取响应

来自分类Dev

使用PowerShell读取下载文件的文件名

来自分类Dev

如何从Google Play获取下载应用程序时间戳的Android应用程序?可能的?

来自分类Dev

如何获取下载该应用程序的人的人口统计信息(年龄,性别)

来自分类Dev

使用fastlane部署后,从曲棍球获取下载URL

来自分类Dev

无法在Chrome扩展程序中获取下载ID

来自分类Dev

从Firebase存储获取下载URL时出现问题

来自分类Dev

在youtube_dl进度钩中获取下载视频的URL

来自分类Dev

Firebase 存储,无法成功获取下载 url。(安卓)

Related 相关文章

  1. 1

    AlamoFire:如何快速获取下载图像的文件大小?

  2. 2

    重定向后如何通过wget获取下载的文件名

  3. 3

    如何设置下载路径并获取下载路径?

  4. 4

    如何设置下载路径并获取下载路径?

  5. 5

    在vb.net中获取下载文件的大小

  6. 6

    以 HTML 格式获取下载文件的版本信息

  7. 7

    如何使用puppeteer获取下载流(缓冲区)?

  8. 8

    如何从iOS中的路径读取下载文件

  9. 9

    如何使用 Paffy 获取下载百分比和下载速度?

  10. 10

    如何获取下拉值到.php文件

  11. 11

    如何获取yum下载的文件?

  12. 12

    从JMeter中的sampler响应中获取下载的文件名

  13. 13

    Google Drive API (REST) - 获取下载、文件查看等....?? (是否可以??)

  14. 14

    Vimeo:从API获取下载链接

  15. 15

    如何获取文件类型?

  16. 16

    使用熊猫读取下载的HTML文件

  17. 17

    如何在Chrome扩展程序中获取下载页面的网址?

  18. 18

    将照片上传到firebase存储后如何获取下载链接

  19. 19

    Unity- 将图像上传到 Firebase 存储后如何获取下载 URL?

  20. 20

    下载前如何获取文件大小

  21. 21

    如何以文件形式下载获取响应

  22. 22

    使用PowerShell读取下载文件的文件名

  23. 23

    如何从Google Play获取下载应用程序时间戳的Android应用程序?可能的?

  24. 24

    如何获取下载该应用程序的人的人口统计信息(年龄,性别)

  25. 25

    使用fastlane部署后,从曲棍球获取下载URL

  26. 26

    无法在Chrome扩展程序中获取下载ID

  27. 27

    从Firebase存储获取下载URL时出现问题

  28. 28

    在youtube_dl进度钩中获取下载视频的URL

  29. 29

    Firebase 存储,无法成功获取下载 url。(安卓)

热门标签

归档