Ciao a tutti
Scrivo di un argomento di cui oramai si sa gia tutto ma serve soprattutto a me come promemoria; in particolare questa funzione serve per visualizzare un file CSV in pagina Web senza redirigere (Response.Redirect) la chiamata a un file CSV su FileSystem, ma leggendolo o scrivendolo direttamente in memoria per poi scriverlo sullo stream output della pagina ASPX (Page.Response).
In particolare quando si adotta questa tecnica è fondamentale specificare il “MIME type”; per i file CSV è “text/csv”, aggiungendo l’Header (AddHeader) possiamo specificare se Explorer caricherà il documento come “attachment” (aprendolo in una nuova window) o “inline”, in questo caso Explorer lo aprirà nella pagina ASPX corrente associato al flusso Response.
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
foreach (DataRowView drv in dvRisulatiGrid) {
DataRow dr = drv.Row;
string A = (string)dr[“A”];
string B = (string)dr[“B”];
string C = (string)dr[“C”];
tw.Write(A);
tw.Write(";");
tw.Write(B);
tw.Write(";");
tw.WriteLine(C);
tw.Flush();
}
FlushOutput(ms, false);
Naturalmente nel MemoryStream ci sarà il contentudo del file CSV che verrà interpretato da Excel (o da qualsiasi altro programma associato). Il CSV avrà il classico formato A;B;C;<CRLF>
private void FlushOutput(MemoryStream ms, bool bAttachment) {
try{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
BinaryWriter bwriter = new BinaryWriter(Response.OutputStream);
Response.ContentType = "text/csv";
Response.BufferOutput = true;
if (bAttachment) {
Response.AddHeader("Content-Disposition", "attachment; filename=\"ExportResult.csv\"");
} else {
Response.AddHeader("Content-Disposition", "inline; filename=\"ExportResult.csv\"");
}
bwriter.Write(ms.ToArray());
bwriter.Close();
} catch (Exception ex) {
string Error = ex.ToString();
} finally {
Response.End();
}
}
Questo meccanismo ci consente di sostituire il normale flusso HTML con un qualsiasi flusso binario come PDF, DOC, RTF specificando per ogni documento il suo MIME corretto.
http://www.iana.org/assignments/media-types/
http://www.asahi-net.or.jp/en/guide/cgi/mimetype.html
http://www.ltsw.se/knbase/internet/mime.htp
Grazie al MIME type Explorer sa a che applicativo associare lo stream binario per visualizzare correttamente il file dentro la nostra pagina di Explorer J.
Ciao a tutti.
Allino