Force download ASP.Net
In ASP.Net (mit C#) ich bin versucht zu erstellen .DAT-Dateien mit plain-text und schickt es an den browser und force download. Ich habe versucht, einige Dinge, aber ich nicht bekommen kann es arbeiten. In meiner aspx-Datei es ist eine ImageButton
<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />
In der OnClick-Methode, die ich versuche, die Datei zu erzeugen und an den browser zu senden.
protected void btnSave_OnClick(object sender, EventArgs e)
{
string file = "test.dat";
string fileName = "~\\Stages\\Broekx\\Databanken\\" + file;
FileStream fs = new FileStream(MapPath(fileName), FileMode.Open);
long cntBytes = new FileInfo(MapPath(fileName)).Length;
byte[] byteArray = new byte[Convert.ToInt32(cntBytes)];
fs.Read(byteArray, 0, Convert.ToInt32(cntBytes));
fs.Close();
ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave");
btnSave.Visible = false;
File.Delete(Server.MapPath(fileName));
if (byteArray != null)
{
this.Response.Clear();
this.Response.ContentType = "text/plain";
this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
this.Response.BinaryWrite(byteArray);
this.Response.End();
this.Response.Flush();
this.Response.Close();
}
}
Die Datei test.dat existiert in den richtigen Ordner und muss gelöscht werden, nachdem Sie gelesen wurden, in Byte. Ich habe versucht, diese löschen, ohne die Datei und die, die nicht arbeiten entweder.
Nach einem Klick auf die Schaltfläche btnSave muss versteckt sein, so dass ist, warum ich den parameter Visible auf false.
Ich habe auch versucht es mit " content-type "application/octet-stream" oder eine PDF-Datei und content-type "application/pdf", aber nichts funktioniert. Die Seite wird normal geladen und keine Datei ist, die heruntergeladen wird.
- Ich vermute, einige sind Teil der Antwort bekommt, senden, bevor der Header. Ich versteh auch nicht, wie Sie erwarten, dass eine einzige Antwort, eine Datei herunterzuladen, und einen Knopf unsichtbar zugleich.
- Ich dachte, etwas ähnliches aber wie kann ich diese Arbeit machen?
- Als Randbemerkung: schau
File.ReadAllBytes
ersetzen Sie die 5 Zeilen, die Sie verwenden, die Datei zu Lesen. Sollten Sie nur tun, dass bei sehr kleinen Dateien, obwohl, vielleicht bis zu 10kB. - Ich glaube nicht, verwenden webforms, so kann ich dir nicht helfen mit, dass. Ich würde ausblenden die Schaltfläche mit javascript, und nur dann auslösen, der download.
- Versucht, ohne sich zu verstecken, die Taste aber nicht funktioniert entweder. Die Datei ist mit über 50kb.
- Das "Lesen" nicht garantiert füllen Sie den gesamten Puffer. Es gibt die tatsächliche Anzahl der bytes, die gelesen - check. Verwenden ReadAllBytes statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Datei, string Pfad eigentlich richtig?
Sollte es nicht sein mit dem Namen?
Warum sind Sie das löschen der Datei, bevor es in die Antwort geschrieben? Würde es nicht mehr Sinn machen, die Datei über die Antwort und dann zu löschen?
d.h. Anruf
nachdem der response verwendet werden.
Sollten Sie versuchen:
TransmitFile ist sehr effizient, da es im Grunde verschiebt die Datei-streaming für IIS-möglicherweise auch verursacht der Datei zu werden in der Kernal-cache (basierend auf IIS-caching-Regeln).
Antwort.End();