Ich habe einen Download-Link wie diesen:
https://someURL.com/PiPki.aspx?ident=594907&jezik=de
Das Download-Ergebnis kann eine Datei mit einem beliebigen Dateityp sein. Zum Beispiel Picture.jpg
oder something.pdf
. Wie ist es möglich, die hinter diesem Link stehende Datei mit ihrem ursprünglichen Namen und ihrer ursprünglichen Erweiterung herunterzuladen?
Über HTTP besteht nicht nur die Möglichkeit, Nutzdaten zu übertragen, sondern es gibt auch einen Header, mit dem Sie Metadaten übertragen können. Auf der Empfängerseite können Sie diese Daten verwenden, z. B. um den Namen zu bestimmen, unter dem die Datei gespeichert werden soll.
Um den Dateityp zu bestimmen, muss die HTTP-Antwort den richtigen Content-Type
Header haben (siehe hier ). Wenn es sich bei der übertragenen Datei um eine PDF-Datei handelt, enthält die HTTP-Antwort das Header-Feld
Content-Type: application/pdf
Darüber hinaus besteht die Möglichkeit, einen Dateinamen im Content-Disposition
Header zu übergeben (siehe hier ), wenn die Disposition auf gesetzt ist attachment
(dh eine herunterladbare Datei anstelle von Inline-Inhalten).
Content-Disposition: attachment; filename="something.pdf"
Wenn es ein bekannten ist Content-Type
, aber kein Dateiname, würde Ihre Option sein , ein Standard - Dateinamen zu verwenden und die Erweiterung Anpassung der Content-Type
zum Beispiel download.pdf
. Wenn das Content-Type
fehlt oder generisch ist, haben Sie Pech. Sie könnten versuchen, den Inhalt der Datei abzurufen, dies kann jedoch erfolgreich sein oder auch nicht und für bestimmte Dateitypen unzuverlässig sein.
Da dies eine C # -Frage ist
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);
}
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen