2012-01-17 10 views
16

Piszę prostą stronę testową, aby pobrać plik tekstowy do przeglądarki po kliknięciu przycisku. Dostaję naprawdę dziwny błąd, którego nigdy wcześniej nie widziałem. jakieś pomysły?ASP.Net Pobierz plik do przeglądarki klienta

Błąd pojawia się na "Response.End();" a plik nie trafia do przeglądarki klienta

Kod:

string filePath = "C:\\test.txt"; 
    FileInfo file = new FileInfo(filePath); 
    if (file.Exists) 
    { 
    Response.ClearContent(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.ContentType = "text/plain"; 
    Response.TransmitFile(file.FullName); 
    Response.End(); 
    } 

Błąd:

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

+1

Usuń koniec i spróbuj Responce.Flush() i Responce.ApplicationInstance.CompleteRequest(); – Aristos

+0

Dobre połączenie, które powstrzymało wyjątek od wyrzucenia. Ale kod nadal działa bez niczego, co dzieje się w przeglądarce. ?? – tier1

Odpowiedz

26

Spróbuj zmienić go.

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "text/plain"; 
Response.Flush(); 
Response.TransmitFile(file.FullName); 
Response.End(); 
+0

Tak jak poprzednio, uruchamia kod i zgłasza wyjątek na Response.End(). Wydaje się dziwne, że Response.TransmitFile wykonuje ok, ale plik nie zostanie przeniesiony? – tier1

+0

Właściwie to działa. Dzięki! – tier1

+1

@Ashwin: Próbuję tego rozwiązania w moim pliku z kodem (mój problem to http://stackoverflow.com/questions/18599735/downloading-a-dynamic-file), ale bez względu na to, gdzie spróbuję wywołać ' TransmitFile() 'lub' WriteFile() 'Ciągle otrzymuję wyjątek: ** Serwer nie może ustawić typu zawartości po wysłaniu nagłówków HTTP. ** Jakieś sugestie? –

7

Wystarczy niewielki dodatek do powyższego roztworu, jeśli masz problem z nazwą pobranego pliku za ...

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\""); 

Spowoduje to powrót dokładną nazwę pliku, nawet jeśli zawiera spacje lub inne znaki.