2009-12-08 5 views
5

Mam stronę, która generuje plik dynamiczny do pobrania i wysyła go do klienta za pomocą Response.BinaryWrite.Pobieranie pliku ASP.NET Response.BinaryWrite jest blok z SSL

Wszystko wydaje się działać dobrze, z wyjątkiem sytuacji, gdy przenieśliśmy go na serwer testowy z protokołem SSL. Pobieranie odbywa się w nowym oknie, a to, co widzę (w IE7/8, ale nie w wersji chrome lub FF), jest otwierane i zamykane, ale nie jest wyświetlane okno dialogowe pliku.

Oto pełna zapisu nagłówka:

Response.Clear() 
     Response.Buffer = True 
     Response.ContentType = "application/octet-stream" 
     Response.AddHeader("Content-Length", abytFileData.Length.ToString) 
     Response.AddHeader("cache-control", "private") 
     Response.AddHeader("Expires", "0") 
     Response.AddHeader("Pragma", "cache") 
     Response.AddHeader("content-disposition", "attachment; filename=""" & pMsg!pstrFileName & """") 
     Response.AddHeader("Accept-Ranges", "none") 
     Response.BinaryWrite(abytFileData) 
     Response.Flush() 
     Response.End() 

Myślałem na pewno, że moim problemem było to, co zostało wymienione here,

Ale moja heade cache-control jest prawidłowe. Jakieś pomysły?

+0

może duplikować? http://stackoverflow.com/questions/419868/file-download-dialog-ie7-disappears –

+0

Nie widziałem tego postu, ale podany link jest podobny. W swoim pytaniu nie określał nagłówka kontroli pamięci podręcznej jako cokolwiek, co było przyczyną jego problemu. W moim określam kontrolę pamięci podręcznej jako prywatną, która powinna działać. – Gaidin

+0

Twoja ważność: 0 lub Pragma może być winowajcą. Powinieneś rozważyć ich usunięcie. – EricLaw

Odpowiedz

2

Napotkałem ten sam problem i po pewnym stopniem dochodzenia znalazłem artykuł o codeproject sugerujące, że pobieranie jest blokowany przez ustawienia zabezpieczeń IE. Jeśli przejdziesz do menu Narzędzia-> Opcje internetowe-> karta Zabezpieczenia i zobacz opcje pobierania dla strefy, do której masz dostęp, musisz zmienić opcję "Automatyczne monitowanie pobierania plików", aby była włączona. Domyślne ustawienie strefy "Internet" to Wyłączone. Oto link do artykułu, o którym wspomniałem: http://www.codeproject.com/KB/aspnet/SecureFileDownload.aspx

+0

Tak, to był ten sam wniosek, do którego również doszedłem. Niezbyt pomocne jest to, że ustawienie zabezpieczeń dla połączeń SSL nie jest domyślnie wymuszane na monitowaniu pobierania, a informowanie każdego z naszych użytkowników o zmianie ustawień zabezpieczeń nie jest tak naprawdę opcją. Co zrobiłem zamiast robić nasze pobieranie w osobnym oknie, zrobiłem to w iframe, więc ostrzeżenie o usunięciu zabezpieczeń IE było widoczne. – Gaidin

3

Patrz odpowiedź tutaj:

C# BinaryWrite over SSL

Zasadniczo wymienić:

Response.Clear(); 

z ...

Response.ClearContent(); 
Response.ClearHeaders(); 
+0

Niestety zapomniałem wspomnieć, że próbowałem również. Brak szczęścia. – Gaidin

1

Czy próbowałeś zmianę lub usunięcie wygaśnie lub nagłówki Pragma ? Poniższy kod działa dla mnie podczas przesyłania strumieniowego plików PDF przez SSL:

Response.Buffer = True 
Response.ClearContent() 
Response.ClearHeaders() 
Response.AddHeader("Cache-Control", "max-age=3") 
Response.AddHeader("Pragma", "public") 
Response.ContentType = "application/pdf" 
Response.AddHeader("Content-Disposition", "attachment; filename=file.pdf") 
Response.AddHeader("Content-Length", mem_stream.Length.ToString) 
Response.BinaryWrite(mem_stream.ToArray()) 
Response.Flush() 
Response.End()