Vorrei creare un file di testo per l'esportazione/download, come un * .csv, da un'applicazione ASP.NET. So di Response.TransmitFile, ma voglio farlo senza creare e salvare fisicamente un file sul server. È possibile? Qualcuno ha fatto qualcosa del genere?In ASP.NET, come ottenere il browser per scaricare il contenuto di stringhe in un file? (C#)
risposta
Un file non ancora salvato è solo una variabile stringa o un MemoryStream. Ma per grandi quantità di dati probabilmente non vuoi tenere tutto in memoria. Cosa vuoi fare con questo "file" una volta che ce l'hai?
Vorrei scaricarlo –
Quando si dice "Crea un file per l'esportazione", sono consapevole che si desidera renderlo scaricabile nel browser. Se è così, ecco un esempio.
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();
}
citare: RFC 4180
Suppongo tu intenda che questo sia inserito in una normale pagina ASPX? Ciò funzionerebbe, ovviamente, ma non è davvero ottimale. Ci sarà un po 'di overhead per inizializzare/iniziare a generare la pagina ASPX all'inizio. – Noldorin
sì, questo andrebbe in una pagina ASPX "normale". Non sei sicuro di cosa intendi per overhead, o perché quello che ho qui è sub-ottimale. – Cheeso
Sì, un ASHX dovrebbe fare il lavoro bene. Ho suggerito un gestore HTTP personalizzato, ma entrambi funzionerebbero bene qui. – Noldorin
Si potrebbe scrivere direcly al Response.OutputStream e impostare il tipo di contenuto a destra, e l'intestazione la disposizione dei contenuti.
Oh, non è male. In Page_Load della tua pagina ASPX fare questo:
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(/* your text goes here */);
Quanto sopra è un esempio se il 'file' è XML, ma può essere qualsiasi cosa, da e file excel in un PDF. Tutto ciò che devi fare è aggiornare il ContentType che puoi cercare tramite Google o Live.
wow you people are fast ... =) – JasonRShaver
Prova questo campione:
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();
}
Ti consigliamo di guardare a scrivere una personalizzato HTTP Handler (una classe che implementa IHttpHandler
) e semplicemente registrazione nel web.config. Vedere this article on MSDN per un buon esempio di come impostarne uno.
Ecco un semplice esempio di come è possibile implementare uno per restituire il markup per alcuni dati 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; }
}
}
Questa alternativa, che è forse un po 'più semplice, è quello di utilizzare una pagina ASHX handler. Il codice sarebbe quasi identico.
Nota che è anche possibile (se non documentato) collegare un IHTTPHandler senza muovere il web.config: il tipo di 'pagina' ASHX fornisce il cablaggio per te. –
(Ho usato questa tecnica per generare pulsanti grafici dinamicamente in passato, penso che sia abbastanza utile). –
@Tetsujin: Sì, assolutamente. In alcuni casi un gestore HTTP (IH HTTPHandler) è più desiderabile, poiché offre una flessibilità leggermente maggiore, ma un ASHX sarebbe altrettanto valido in questo caso. – Noldorin
- 1. Forza il browser per scaricare il file invece di aprirlo
- 2. Impossibile scaricare il file docx utilizzando C#
- 3. Tablet non può scaricare il file .apk in alcuni browser
- 4. Come ottenere un browser Web per scaricare un file che è memorizzato in una stringa JavaScript?
- 5. Come posso scaricare il file zip in C#?
- 6. Emulazione di un browser per scaricare un file?
- 7. Come utilizzare restsharp per scaricare il file
- 8. Come può un FileInputStream ottenere il contenuto di File?
- 9. golang - come scaricare il file nel browser dal server golang?
- 10. Modo più pulito per ottenere il contenuto di un file come stringa in Rust?
- 11. Come forzare il browser per scaricare, non visualizzare, i documenti PDF in ASP.NET Webforms
- 12. Come leggere il contenuto di un file in Amazon S3
- 13. Come si può forzare il browser a scaricare un file xml?
- 14. come gzip il contenuto in asp.net MVC?
- 15. Come aggiungere il contenuto di più file in un file
- 16. evitare problemi di tipo di contenuto quando si scarica un file tramite il browser su Android
- 17. Come posso ottenere il contenuto del file caricato in PHP?
- 18. Come ottenere il contenuto da file da questo URL?
- 19. Come ottenere il contenuto del file allegato con jQuery
- 20. Quale dovrebbe essere il tipo di contenuto per scaricare qualsiasi formato di file in jsp?
- 21. In extjs come ottenere il contenuto del file caricato
- 22. Il browser Android rifiuta il contenuto-disposizione: in linea?
- 23. C# Controlla se il file di testo ha un contenuto
- 24. Come scaricare un file con WinHTTP in C/C++?
- 25. come ottenere ParcelFileDescriptor per il contenuto del file?
- 26. ASP.Net Scarica il file sul browser del client
- 27. Come ottenere il percorso completo per un file in VBScript?
- 28. C++ include il browser di file
- 29. scaricare e decomprimere il file in iOS
- 30. Come ottenere il contenuto di un'Assegnazione in Sakai tramite REST
potresti essere un po 'più specifico? Vuoi dire che vuoi prendere una stringa e salvarla su un file sul client e non creare mai un file sul server? –