Przesyłam dane z serwera do klienta do pobrania przy użyciu filestream.write
. W takim przypadku mogę pobrać plik, ale nie jest on wyświetlany w mojej przeglądarce. Wyskakujące okienko "Zapisz jako" nie pojawia się "Pasek pobierania" pojawia się w sekcji Pobieranie. Od rozglądania się, myślę, że muszę umieścić "coś" w nagłówku odpowiedzi, aby poinformować przeglądarkę, że istnieje załącznik z tą odpowiedzią. Również chcę ustawić plik cookie. Aby to osiągnąć, to co robie:Dodawanie nagłówka do odpowiedzi HTTP w działaniu wewnątrz kontrolera w 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");
}
Dostaję komunikat, że: „System.web.httpcontext.current jest własnością i jest używany jako typ”
Czy dokonuję aktualizacji nagłówka we właściwym miejscu? Czy jest jakiś inny sposób na zrobienie tego?
Próbowałem to zrobić.Wciąż jednak nie pokazuje okna dialogowego "Zapisz jako" ani paska postępu pobierania w sekcji pobierania w przeglądarce. – ezile
To działa dla mnie i widzę, że html widoku jest pobierany w moim przypadku testowym. Dla ciebie może to być spowodowane przekierowaniem na działanie. Jednak nie próbowałem tego scenariusza. Po prostu spróbuj umieścić ten nagłówek pod Index tylko po wypróbowaniu. – PSL
Będę szczegółowo więcej. Jestem na stronie "Indeks", a następnie klikam Pobierz, a następnie wywołuj akcję Pobierz za pomocą JavaScript. Powyższy kod jest zapisany w akcji Pobierz. Po przesłaniu pliku do użytkownika przekierowuję na stronę indeksu. Jestem zdezorientowany, kiedy powinienem powiedzieć przeglądarce, że jest pobieranie. Chodzi mi o to, że wysyłam te rzeczy za pomocą FileStream.WriteSync, więc domyślam się, że muszę wysłać przeglądarkę przed wysłaniem pliku, że jest załącznik i tym samym wyskoczy okno dialogowe "zapisz jako". Myślę, że jestem zdezorientowany w przepływie pracy, a zatem nie mam czasu i miejsca, gdzie powinienem dokonać zmiany. – ezile