En ASP.Net (con C#), intento crear un archivo .DAT con texto sin formato y enviarlo al navegador para forzar la descarga. He intentado varias cosas pero no puedo hacer que funcione. En mi aspx-archivo hay un ImageButton
Force download ASP.Net
<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />
En el OnClick método que estoy tratando de crear el archivo y enviarlo al navegador. existe
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();
}
}
El archivo test.dat en la carpeta correcta y tiene que ser eliminado después de que ha sido leído en bytes. Lo intenté sin borrar el archivo y tampoco funcionará.
Después de hacer clic en btnGuardar el botón debe ocultarse, por eso configuro el parámetro Visible como falso.
También lo probé con el tipo de contenido "application/octet-stream" o con un archivo PDF y tipo de contenido "application/pdf" pero nada funciona. La página se carga normalmente y no se está descargando ningún archivo.
Sospecho que parte de la respuesta se envía antes de los encabezados. Tampoco entiendo cómo espera una única respuesta para descargar un archivo y hacer que un botón sea invisible al mismo tiempo. – CodesInChaos
Pensé algo similar, pero ¿cómo puedo hacer que esto funcione? – Yoni
Como nota al margen: observe 'File.ReadAllBytes' que puede reemplazar las 5 líneas que usa para leer el archivo. Sin embargo, solo debes hacer eso con archivos muy pequeños, quizás hasta 10kB. – CodesInChaos