Savefiledialog per applicazioni web

venerdì 06 maggio 2011 - 19.00
Tag Elenco Tags  C#  |  VB.NET  |  .NET 1.0  |  .NET 1.1  |  .NET 2.0  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0  |  Visual Studio 2010  |  Visual Studio 2008  |  Visual Studio 2005

mferrara00 Profilo | Newbie

Ciao a tutti,
ho il seguente problema.
La mia applicazione web (aspx vb.net 4) deve permettere all'utente di salvare dei file xls da un database.
La lettura e scrittura del file xls la faccio senza problemi, ma come faccio a far si che sia l'utente che scarica ad
inpostare il path dove vuole salvare questo file generato al momento?
Non esiste un componente simile a savefiledialog per le applicazioni web???

Grazie mille.
Marco

alx_81 Profilo | Guru

>Ciao a tutti,
ciao

>ho il seguente problema.
>La mia applicazione web (aspx vb.net 4) deve permettere all'utente
>di salvare dei file xls da un database.
>La lettura e scrittura del file xls la faccio senza problemi,
>ma come faccio a far si che sia l'utente che scarica ad
>inpostare il path dove vuole salvare questo file generato al
>momento?
>Non esiste un componente simile a savefiledialog per le applicazioni
>web???
se forzi il download del file excel poi appare la dialog per salvare
http://www.dailycoding.com/Posts/how_to_force_a_file_to_download_in_aspnet.aspx

>Grazie mille.
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Gluck74 Profilo | Guru

si, in pratica per forzare il download devi modificare gli header della richiesta e far credere al browser che è stato richiesto un file Excel.
Queste sono le righe di codice che uso io:
Response.Clear(); Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}_{1}.xls; creation-date='{2}'", strNomeFile, DateTime.Now.ToShortDateString().Replace("/", "-"), DateTime.Now.ToString())); Response.Charset = "utf-8"; Response.AppendHeader("pragma", "no-cache"); Response.Buffer = true; Response.Expires = -1; Response.Write(tw.ToString()); Response.Flush(); Response.End();

Un altro modo è quello di creare il file excel sul server, e creare un link da visualizzare sulla pagina.
Un esempio è questo:

strDownloadFileName = "~/DownloadFiles/" + strNomeFile + ".xls"; hlDownload.Visible = true; hlDownload.Text = "Click here to download file."; hlDownload.NavigateUrl = strDownloadFileName;

dove hlDownload è un link nella pagina:
<asp:HyperLink ID="hlDownload" runat="server" Visible="false"></asp:HyperLink>

Mi raccomando, in questo caso gestisci bene la generazione dei file e soprattutto la cancellazione dopo il download o dopo un certo tempo.

Ciao
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

mferrara00 Profilo | Newbie

ciao Grazie per la risposta.
io ho fatto nel modo seguente:
leggo al tabella, la scrivo nel file excel e la salvo sul server e poi la faccio scaricare.

il codice che ho fatto, prendendo spunto dal tuo (scritto in c#, io sono in vb.net) è il seguente:

Dim strpath As String = Server.MapPath(".\Import")
Dim strfile As String = "FoglioTest.xls"
Dim strfullpathname As String = strpath & "\" & strfile


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma tw che cosa è???
grazie mille.
Marco

Gluck74 Profilo | Guru

Innanzi tutto scusami per l'errore, mi sono mangiato un paio di righe di codice..........

Nella tua soluzione, hai mischiato i due metodi che ti avevo suggerito.
Se guardi il mio post, il primo blocco di codice (che ora riporto corretto), ti server per generare il file excel al volo, senza salvarlo prima sul server.
Ovvero apri la tua sorgente dati, la attacchi ad una griglia, modifichi gli header della response per "ingannare il browser" che ti fa aprire un file excel "al volo".

Mentre se hai già il file sul server (come lo hai creato tu con una connessione OleDB che usa Jet), allora non ti serve questa parte ma semplicemente visualizza nella pagina il link al file.

Ecco il codice corretto:
System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); GridView myGrid = new GridView(); myGrid.DataSource = dtExcel; myGrid.DataBind(); myGrid.RenderControl(hw); Response.Clear(); Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}_{1}.xls; creation-date='{2}'", strNomeFile, DateTime.Now.ToShortDateString().Replace("/", "-"), DateTime.Now.ToString())); Response.Charset = "utf-8"; Response.AppendHeader("pragma", "no-cache"); Response.Buffer = true; Response.Expires = -1; Response.Write(tw.ToString()); Response.Flush(); Response.End();

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5