Me gustaría crear un archivo de texto para exportar/descargar, como un * .csv, desde una aplicación ASP.NET. Sé de Response.TransmitFile, pero quiero hacerlo sin crear y guardar un archivo físicamente en el servidor. ¿Es eso posible? ¿Alguien ha hecho algo así?En ASP.NET, ¿cómo lograr que el navegador descargue contenido de cadenas en un archivo? (C#)
Respuesta
Un archivo que aún no ha guardado es solo una variable de cadena o un MemoryStream. Pero para grandes cantidades de datos, probablemente no desee mantener todo en la memoria. ¿Qué quieres hacer con este "archivo" una vez que lo tienes?
Deseo descargarlo –
Cuando dices "Crear un archivo para exportar", entiendo que quieras que se pueda descargar en el navegador. Si ese es el caso, aquí hay un ejemplo.
public void btnGo_Click (Object sender, EventArgs e)
{
Response.Clear();
string fileName= String.Format("data-{0}.csv", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "filename=" + fileName);
// write string data to Response.OutputStream here
Response.Write("aaa,bbb,ccc\n");
Response.End();
}
citan: RFC 4180
Supongo que tiene la intención de colocarlo en una página ASPX normal. Eso funcionaría, por supuesto, pero no es realmente óptimo. Habrá algunos gastos generales para inicializar/comenzar a generar la página ASPX en el inicio. – Noldorin
sí, esto iría en una página ASPX "normal". No estoy seguro de lo que quiere decir con sobrecarga, o por qué lo que tengo aquí no es óptimo. – Cheeso
Sí, una ASHX debería hacer bien el trabajo. Sugerí un controlador HTTP personalizado, pero cualquiera funcionaría bien aquí. – Noldorin
Se puede escribir direcly a la Response.OutputStream y establecer el tipo de contenido correcto, y encabezado de disposición de contenido.
Oh, eso no está nada mal. En su página ASPX Load hacer esto:
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(/* your text goes here */);
Lo anterior es un ejemplo, si su 'archivo' es XML, pero puede ser cualquier cosa, desde y archivo de Excel a un archivo PDF. Todo lo que tiene que hacer es actualizar el ContentType que puede buscar a través de Google o Live.
wow you people are fast ... =) – JasonRShaver
probar este ejemplo:
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=download.csv");
Response.Write("your,csv,file,contents");
Response.End();
}
Usted querrá buscar en la escritura de un personalizada HTTP Handler (una clase que implementa IHttpHandler
) y sólo tiene que registrarse en web.config. Consulte this article on MSDN para ver un buen ejemplo de cómo configurar uno.
Aquí hay un ejemplo básico de cómo puede implementar uno para devolver el marcado de algunos datos CSV.
using System.Web;
public class MyCsvDocumentHandler : IHttpHandler
{
public static string Data
{
get;
set;
}
public MyCsvDocumentHandler()
{
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/csv"; // Set the MIME type.
context.Response.Write(Data); // Write the CSV data to the respone stream.
}
public bool IsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.
get { return false; }
}
}
Esta alternativa, que es posiblemente un poco más simple, es el uso de una página de ASHX handler. El código sería casi idéntico.
Tenga en cuenta que también es posible (si está poco documentado) vincular un IHTTPHandler sin dañar su web.config: el tipo ASHX 'página' proporciona el cableado para usted. –
(He utilizado esta técnica para generar botones gráficos dinámicamente en el pasado, creo que es bastante útil). –
@Tetsujin: Sí, absolutamente. En algunos casos, es más conveniente un controlador HTTP (IHttpHandler), ya que ofrece un poco más de flexibilidad, pero un ASHX sería igual de bueno en este caso. – Noldorin
- 1. Evitar que IIS descargue el sitio ASP.Net
- 2. content-type of text-plain hace que el navegador descargue el archivo
- 3. ¿Cómo borro todo el contenido de un archivo en C?
- 4. Deje que el usuario descargue un archivo XML
- 5. ¿Descargue un archivo con JSF?
- 6. ¿Cómo guardar el contenido de un generador de cadenas en un archivo de texto usando SaveFileDialog?
- 7. Cómo lograr esta función en C/C++
- 8. ASP.Net Descargar archivo en el navegador del cliente
- 9. Descargue la fuerza de un archivo en el servidor web - ASP .NET C#
- 10. Descargue el archivo .xlsx usando Response.TransmitFile()
- 11. petición del navegador Falsificación en ASP.net C#
- 12. ¿Cómo hacer que un navegador muestre un "guardar como diálogo" para que el usuario pueda guardar el contenido de una cadena en un archivo en su sistema?
- 13. ¿Cómo escribir el contenido de un archivo en otro?
- 14. ¿Cómo lograr const-correctness en C#?
- 15. Ejecutar un archivo .py en el navegador
- 16. ¿Descargue un archivo a través de HTTP en una matriz de bytes en C#?
- 17. ZeroMQ: cómo lograr un multihilo C-like
- 18. PHP - Cambiar el tamaño de la imagen en el servidor antes de que el navegador lo descargue
- 19. ¿Cómo crear un archivo ZIP usando PHP y eliminarlo luego de que el usuario lo descargue?
- 20. Cómo formatear cadenas en ASP.NET Razor
- 21. ¿Cómo puedo eliminar el archivo que se ha navegado en un control de navegador web?
- 22. Evitar problemas de tipo de contenido al descargar un archivo mediante el navegador en Android
- 23. ¿Cómo transmitir contenido de video en asp.net?
- 24. ¿Cómo lograr que los usuarios se basen en el rol?
- 25. Cómo deshabilitar el botón Atrás en el navegador cuando el usuario cierra sesión en asp.net C#
- 26. ¿Cómo se lee el contenido del archivo en una variable en un archivo por lotes?
- 27. cómo leer el contenido de un archivo En Erlang?
- 28. ¿Descargue un archivo/imagen con AFNetworking en iOS?
- 29. CSV hace en vista de Safari, pero quiero que se descargue un archivo
- 30. En la memoria, descargue y extraiga el archivo zip
¿podría ser un poco más específico? ¿Quiere decir que quiere tomar una cadena y guardarla en un archivo en el cliente y nunca crear un archivo en el servidor? –