使用WebClient或HttpClient下载任何类型的文件?

时间:2016-09-19 09:21:39

标签: c#

我知道还有其他类似我的问题。但我面临的问题是不同的。

我想下载任何文件。它可能是图像,PDF,视频。问题是我无法知道我正在下载的文件。这意味着我不知道文件名。所以我尝试了以下内容:

1

private Task<string> DownloadFile(Uri fileUri, string locationToStoreTo)
{
    using (var client = new WebClient())
    {
        client.OpenRead(fileUri);

        var headerContentDisposition = client.ResponseHeaders["content-disposition"];
        var fileName = new ContentDisposition(headerContentDisposition).FileName;
        var generatedName = GeneratePath(locationToStoreTo, fileName);

        client.DownloadFile(fileUri, generatedName);

        return Task.FromResult<string>(generatedName);
     }
}

2:

private async Task<string> DownloadFile(Uri fileUri, string locationToStoreTo)
{
    using (var client = new HttpClient())
    using (var response = await client.GetAsync(fileUri))
    {
        response.EnsureSuccessStatusCode();

        var fileName = response.Content.Headers.ContentDisposition.FileName;
        var generatedName = GeneratePath(locationToStoreTo, fileName);

        var stream = await response.Content.ReadAsStreamAsync();

        using (var fileStream = File.Create(generatedName))
        {
            stream.CopyTo(fileStream);
        }
        return generatedName;

    }
}

但是在两种方式中,ContentDisposition都为null。当我试图找出是否从其中一个URL发送文件名时,我可以看到Firefox知道我正在尝试下载的文件的文件名。

我错过了什么?还有其他方法可以做到这一点吗?

0 个答案:

没有答案