Resulta que durante el desarrollo de nuestro proyecto (los archivos se almacenan en la base de datos), los archivos descargados se escriben en forma de encabezados http. Como sigue Response.Clear();
Respuesta.Buffer = falso;
Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileWJNR.Rows[0]["WJM"].ToString(),System.Text.Encoding.UTF8));
Response.BinaryWrite (flujo de bytes);
Response.End();
Sin embargo, una vez implementado el proyecto, cuando el usuario navega en IE6.0, será interceptado, cerrado y salido. En ese momento, mi colega usó un formulario emergente y luego "haga clic para descargar" en el formulario emergente para que no fuera interceptado.
Probé una solución más directa, que es generar primero un archivo temporal al hacer clic y luego vincularlo al archivo temporal, es decir, aparecerá un cuadro de diálogo para abrir o descargar el archivo. El código es muy simple:
cadena fileName = "nombre de archivo" //usar ID de archivo
cadena tempFilePath = Solicitud.PhysicalPath;
tempFilePath = tempFilePath.Substring(0,tempFilePath.LastIndexOf("\"));
tempFilePath += " \temp\ " + nombre de archivo;
Archivo FileStream = nuevo FileStream(tempFilePath,FileMode.OpenOrCreate,FileAccess.ReadWrite)
;
{
byte[] docBody = (byte[])fileWJNR.Rows[0]["WJNR"] //Conversión
archivo.Write(docBody, 0, docBody.Length);
archivo.Cerrar();
Response.Redirect("temp\" + nombredearchivo);
}
atrapar
{
archivo.Cerrar();
}