Ich streame Daten vom Server zum Client zum Download mit filestream.write
. In diesem Fall ist es möglich, dass ich die Datei herunterladen kann, sie erscheint jedoch nicht als Download in meinem Browser. Weder das Pop-up für "Speichern unter" erscheint, noch "Download-Leiste" erscheint im Download-Bereich. Wenn ich mich umsehe, denke ich, dass ich etwas in den Antwort-Header einfügen muss, um dem Browser mitzuteilen, dass es einen Anhang mit dieser Antwort gibt. Auch ich möchte den Cookie setzen. Um dies zu erreichen, ist es das, was ich tue:Hinzufügen von Header zu HTTP-Antwort in einer Aktion in einem Controller in asp.net/mvc
[HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)]
public ActionResult Download(string name)
{
// some more code to get data in inputstream.
using (FileStream fs = System.IO.File.OpenWrite(TargetFile))
{
byte[] buffer = new byte[SegmentSize];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, SegmentSize)) > 0)
{
fs.WriteAsync(buffer, 0, bytesRead);
}
}
}
return RedirectToAction("Index");
}
ich Störung erhalte, dass: „System.web.httpcontext.current eine Eigenschaft und wird als Typ verwendet“
Mache ich die Header-Aktualisierung am richtigen Ort? Gibt es einen anderen Weg, dies zu tun?
Ich habe versucht, dies zu tun.Es wird jedoch weder das Dialogfeld "Speichern unter" noch die Download-Fortschrittsleiste im Download-Bereich des Browsers angezeigt. – ezile
Das funktioniert für mich und ich sehe die Ansicht html heruntergeladen in meinem Testfall. Für Sie könnte es daran liegen, dass Sie zur Aktion umleiten. Ich habe dieses Szenario jedoch nicht ausprobiert. Versuchen Sie einfach diese Kopfzeile unter Index zu platzieren. – PSL
Ich werde ein bisschen mehr Details. Ich bin auf der Seite "Index" und klicke dann auf Herunterladen, die dann Download-Aktion über JavaScript aufrufen. Der obige Code ist in Download-Aktion geschrieben. Und nachdem ich die Datei an den Benutzer gestreamt habe, leite ich auf die Seite Index um. Ich bin verwirrt wie in wann soll ich Browser sagen, dass es einen Download gibt. Ich meine, ich sende das Zeug mit FileStream.WriteSync, also denke ich, dass ich dem Browser mitteilen muss, bevor ich die Datei sende, dass es einen Anhang gibt, und dadurch wird das "Speichern unter" -Dialogfenster geöffnet. Ich denke, ich bin hier im Workflow verwirrt und weiß daher nicht wann und wo ich Änderungen vornehmen soll. – ezile