我知道还有其他类似我的问题。但我面临的问题是不同的。
我想下载任何文件。它可能是图像,PDF,视频。问题是我无法知道我正在下载的文件。这意味着我不知道文件名。所以我尝试了以下内容:
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);
}
}
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知道我正在尝试下载的文件的文件名。
我错过了什么?还有其他方法可以做到这一点吗?