Content-Disposition ist eine Erweiterung des MIME-Protokolls, die den MIME-User Agent anweist, angehängte Dateien anzuzeigen. Wenn Internet Explorer den Header empfängt, aktiviert er das Dateidownload-Dialogfeld, und sein Dateinamensfeld wird automatisch mit dem im Header angegebenen Dateinamen gefüllt. (Beachten Sie, dass dies durch Absicht verursacht wird; Sie können diese Funktion nicht nutzen, um ein Dokument auf dem Computer eines Benutzers zu speichern, ohne den Benutzer zu fragen, wo es gespeichert werden soll. )
Wenn der Server eine Datei an den Client-Browser sendet, wird sie in der Regel standardmäßig über den Browser geöffnet, z. B. txt, jpg usw., die direkt im Browser angezeigt werden. Wenn der Benutzer zum Speichern aufgefordert werden muss, ist es notwendig, Content-Disposition zur Verarbeitung zu verwenden, der Schlüssel ist, Anhänge hinzuzufügen:
Response.AppendHeader("Content-Disposition","Anhang; filename=FileName.txt");
Hinweis: Dies fordert dich auf, zu speichern oder zu öffnen, und selbst wenn du es öffnest, wird es mit dem zugehörigen Programm wie Notepad geöffnet, anstatt IE direkt zu öffnen.
Content-Disposition bedeutet, einen Standard-Dateinamen bereitzustellen, wenn der Benutzer den gewünschten Inhalt als Datei speichern möchte. Die spezifischen Definitionen sind wie folgt:
Inhalt-Disposition = "Inhalt-Disposition" ":"
Dispositionstyp *( ";" Disposition-parm )
disposition-type = "Anheftung" | disp-extension-token
disposition-parm = Dateiname-parm | disp-extension-parm
filename-parm = "filename" "=" quoted-string
disp-extension-token = Token
disp-extension-parm = Token "=" ( Token | Anführungszeichenkette )
So sehen wir konkrete Beispiele aus dem oben:
Cache-Control:private
Content-Disposition:attachment; filename=Index1.png
Content-Length:328462
Content-Type:image/png
Date:Fri, 14 Oct 2016 01:08:04 GMT
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:5.2
X-Powered-By:ASP.NET
Content-Disposition: attachment; filename=“filename.xls”
Natürlich kann der Dateinamensparameter Pfadinformationen enthalten, aber User-Agnet ignoriert diese Information und verwendet nur den letzten Teil der Pfadinformationen als Dateiname. Wenn du diesen Header im Antworttyp application/Octet-Stream verwendest, bedeutet das, dass du den Inhalt nicht direkt anzeigen möchtest, aber ein Dialog "Dateidownload" erscheint, und dann musst du entscheiden, ob du "öffnen" oder "speichern" möchtest.
Notizen:
1. Beim Verwenden von Content-Disposition im Code, um sicherzustellen, dass der Browser den Download-Dialog öffnet. response.addHeader("Content-Disposition","Attachment"); Stelle sicher, dass du nichts gegen das Deaktivieren des Browser-Cachings unternommen hast. Wie folgt:
response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0);
|