我有这样的下载链接:
https://someURL.com/PiPki.aspx?ident=594907&jezik=de
下载结果可以是任何文件类型的文件。例如Picture.jpg
或something.pdf
。
如何以原始名称和扩展名下载此链接后面的任何文件?
答案 0 :(得分:5)
通过HTTP,不仅可以传输有效载荷数据,而且还可以使用标头来传输元数据。在接收方,您可以使用该数据,例如确定将文件存储为的名称。
为了确定文件类型,HTTP响应必须具有正确的Content-Type
标头(请参阅here)。如果传输的文件是PDF,则HTTP响应将具有标题字段
Content-Type: application/pdf
此外,如果将处置设置为Content-Disposition
,则可以在attachment
标题中传递文件名(请参阅here)(即可下载的文件而不是内联内容)
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);
}
}