如何在不知道文件类型或文件名的情况下下载文件?



我有一个这样的下载链接:

https://someURL.com/PiPki.aspx?ident=594907&jezik=de

下载结果可以是具有任何文件类型的文件。例如Picture.jpgsomething.pdf。 如何下载此链接后面的任何文件及其原始名称和扩展名?

通过HTTP,不仅可以传输有效载荷数据,还可以使用标头来传输元数据。在接收方,您可以使用该数据来确定存储文件的名称。

为了确定文件类型,HTTP 响应必须具有正确的Content-Type标头(请参阅此处)。如果传输的文件是 PDF,则 HTTP 响应将具有标头字段

Content-Type: application/pdf

此外,如果处置设置为attachment,则有可能在Content-Disposition标头中传递文件名(请参阅此处)(即可下载文件而不是内联内容)

Content-Disposition: attachment; filename="something.pdf"

如果有一个已知的Content-Type,但没有文件名,您的选择是使用默认文件名和与Content-Type匹配的扩展名,例如download.pdf。如果Content-Type缺失或通用,那么您的运气不好。您可以尝试获取文件的内容,但这可能会成功,也可能不会成功,并且对于某些文件类型可能不可靠。

由于这是一个 C# 问题

var client = new HttpClient();
using (var response = await client.GetAsync("https://someURL.com/PiPki.aspx?ident=594907&jezik=de"))
{
string fileName = null;
if (response.Headers.Contains("Content-Disposition"))
{
fileName = GetFileNameFromContentDisposition(response.Headers);
}
if (fileName == null && response.Headers.Contains("Content-Type"))
{
var extension = GetExtensionFromContentType(response.Headers);
fileName = $"download.{extension}";
}
using (var fileStream = File.OpenWrite(fileName))
{
await response.Content.CopyToAsync(fileStream);
}
}

最新更新