Torna al Thread
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mime;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebGenericHandlers
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnShowFile_OnClick(object sender, EventArgs e)
{
// qui ci va la tua logica di generazione file
// quando hai creato il file su disco lo puoi ritornare al client chiamando il metodo:
ResponseFile("~/Book1.xls");
/*
* chiaramente quello è per farti vedere un esempio con un excel fisso,
* dal momento in cui devi creare il file dinamicamente,
* devi pensare che può essere chiamato da più utenti contemporaneamente
* e quindi devi generale un file con un nome univoco tutte le volte.
* Puoi utilizzare i metodi descritti qui per avere un file temporaneo univoco:
* http://msdn.microsoft.com/it-it/library/system.io.path.gettempfilename.aspx
* http://msdn.microsoft.com/it-it/library/system.io.path.getrandomfilename.aspx
* la differenza tra i due è spiegata nei link.
*
* questo metodo è per venire in contro al fatto che forse sei costretto a creare
* un file per forza, ma se l'oggetto excel che stai utilizzando supporta anche
* la scrittura del file su uno stream, sarebbe meglio, così eviti di scrivere
* su disco, e quindi le operazioni sono più veloci e non rischi di avere un
* collo di bottiglia sulle performance dei dischi, ma lavori solo in memoria;
* però lascio a te il compito di convertirlo con una gestione in memoria senza
* scrivere su file lasciandoti due indizi:
* Response.BinaryWrite(); http://www.dotnetperls.com/response-binarywrite
* MemoryStream http://msdn.microsoft.com/it-it/library/system.io.memorystream(v=vs.80).aspx
*/
}
private void ResponseFile(string filename)
{
Response.Clear();
var cd = new ContentDisposition();
cd.FileName = "TheAmazingExcelFile.xls";
// questo dovrebbe aprire il programma automaticamente se ci riesce, ma forse con excel non funziona, per i PDF è così che si fa per farglieli aprire nel browser, però almeno explorer se ne accorge e ti fa un bel popup grande chiedentoti conferma se vuoi aprirlo con excel
cd.Inline = true;
Response.AddHeader("Content-Disposition", cd.ToString());
Response.ContentType = "application/excel";
Response.WriteFile(filename);
Response.End();
}
}
}