2016-07-09 7 views
1

ich eine Anfrage über Ajax senden und wenn Antwortdaten Erfolg ist wahr, ich mache eine GET-Anfrage in Ajax-Erfolg Funktion:Datei herunterladen über GET und gibt die Referrer-URL

success: function (data, status) { 

       if (!data["Success"]) { 
        alert("Error occurred: Cant read data properly," + data["Message"]); 
        return null; 
       } 
       window.location = '/Home/downloadanddelete?file=output.' + data["filetype"]; 

Das Problem ist, wenn Get-Anfrage gebucht die Antwort auf der Steuerung ist: enter image description here

Wie Sie die Datei uRL sehen ist: „http://localhost:53091/Home/downloadanddelete?file=output.xml

und ich erwarte, dass diese ‚output.xml‘ Datei herunterladen und die Referrer-uRL zurück.

hier ist Download-Methode in der Steuerung:

[HttpGet] 
     public ActionResult downloadanddelete(string file) 
     { 
      string fullName = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data", file); 
      if (System.IO.File.Exists(fullName)) 
      { 
       return File(fullName, "application/xml"); 
      } 
      return View("Index"); 
     } 

Was ist das hier falsch?

+0

Es sieht aus wie es ist "Herunterladen"; Wollen Sie, dass das XML als Datei heruntergeladen werden soll? – Jacob

+0

Ja Ich möchte die Datei output.xml heruntergeladen sehen .. nicht den Inhalt im Browser .. – TyForHelpDude

Antwort

3

Sie müssen zwei Dinge ändern. Im Server-Code müssen Sie einen Content-Disposition-Header senden, um anzuzeigen, dass der Inhalt ein "Anhang" ist. Fügen Sie diese Zeilen vor, die Datei zu senden:

var cd = new System.Net.Mime.ContentDisposition 
{ 
    FileName = "filename.xml", 
    Inline = false 
}; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 

Zweitens sollten Sie window.location.assign(...); verwenden, anstatt window.location für eine seemless Erfahrung im Browser einstellen.

2

Sie können den Header-Typ "Content-Disposition" verwenden, um dem Browser mitzuteilen, dass er die Datei vorzugsweise herunterladen und speichern soll, anstatt sie anzuzeigen. Es gibt einige Informationen über sie hier: https://stackoverflow.com/a/20509354/1862405

Für Ihren speziellen Fall, würden Sie wollen die Anlage Disposition verwenden, die Sie auf Ihre Controller-Aktion mit AddHeader hinzufügen:

HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=\"download.xml\""); 

Eine andere Sache ist, dass Firefox könnte dies überschreiben, aber Sie können für Dateitypen einrichten, wie es mit ihnen umgehen soll.

Verwandte Themen