2012-12-18 15 views
8

Ich habe eine Seite, die eine binari-Datei, PDF, Word oder Excel an den Webbrowser sendet. In Firefox und IE sowohl ein Dialog öffnet sich fragen, was Sie whant Sie mit dieser Datei zu tun, „offen“ oder „Speichern“Wie erzwingen Sie Chrome, um einen "Datei öffnen" -Dialog zu öffnen, wenn Sie eine Datei von ASP.NET CodeBehind herunterladen?

enter image description here

aber Chrome speichern Sie es direkt auf Ihren Computer.

Ist es möglich, machen Chrome fragen Sie, was Sie mit dieser Datei tun möchten, einige Metadaten in Web-Antwort platzieren, bevor Sie die Datei an den Browser senden?

Antwort

9

Es ist nicht möglich, Chrome zu zwingen, den Speichern-Dialog aufzurufen. Der Benutzer muss dieses Verhalten in der Chrome-Konfiguration (erweiterte Einstellungen) ändern.

enter image description here

+0

Wo wäre diese Einstellung hilfreich sein? –

+0

@ValentinDespa hat die Antwort aktualisiert. – daniloquio

+0

Aber Benutzer bitten, dieses Kontrollkästchen anzukreuzen ist nicht praktisch richtig, gibt es also eine andere Lösung dafür? –

0

Sie müssen einige Header senden, damit der Browser weiß, wie die Sache zu handhaben Sie Streaming wie:

Response.ContentType 
Content-Disposition, application,and 
filename=" + FileName 

, die einen Download zwingen wird. Siehe dazu auch diesen Link für weitere Informationen:

http://www.devtoolshed.com/aspnet-download-file-web-browser

Dank

0

vielleicht wird es

System.String filePath = "c:\\tempFile.pdf" 
System.IO.FileInfo fileInfo = new FileInfo(filePath); 

System.Web.HttpContext context = System.Web.HttpContext.Current; 
System.Web.HttpResponse response = context.Response; 
response.Clear(); 
response.ClearHeaders(); 
response.ClearContent(); 
response.ContentType = "application/pdf"; 
response.AppendHeader("content-type", "application/pdf"); 
response.AppendHeader("content-length", fileInfo.Length.ToString()); 
response.AppendHeader("content-disposition", String.Format("attachment; filename={0}.pdf", outputFileName)); 
response.TransmitFile(filePath); 
response.Flush(); // this make stream and without it open chrome save dialog 
context.ApplicationInstance.CompleteRequest(); // send headers and c# server-side code still continue 

System.IO.File.Delete(filePath); // clean cache here if you need 

response.End(); 
Verwandte Themen