Belius' Blog

Il blog di Simone Belia
posts - 16, comments - 49, trackbacks - 23

ASP.NET AJAX File Download

Molte volte è necessario permettere agli utenti di scaricare dei file dalle nostre applicazioni ASP.NET, in maniera un pò più elaborata del semplice link alla risorsa. Mettete per esempio che il file da scaricare non esista, ma viene generato durante il postback, oppure mettete che per sicurezza i file stanno all'interno di una cartella del server non raggiungibile tramite Http.

Le metodologie per venire incontro a queste problematiche sono state documentate tantissime volte, ma se voglio utilizzarle con AJAX si devono utilizzare dei trucchetti, proprio perchè, come per l'upload di file, AJAX non permette il download asincrono delle risorse....

In questo post troverete uno di questi trucchetti...e spero che vi faccia comodo come lo ha fatto a me!!! :-)

Il trucchetto consiste di crearsi un HttpHandler che si occupi di recuperare la risorsa e che la restituisca sottoforma di stream nella Response. Logicamente l'handler potendo accedere al contesto e quindi il QueryString e quant'altro potrà effettuare tutti suoi controlli di sicurezza prima di restituire il file.....non me ne vogliano...ma in poche parole non fate come loro  :-)

Successivamente nelle pagine dove è presente uno scriptmanager ed uno o più updatepanel si dovrà aggiungere questo frammento di codice JavaScript:

function GetFile(parm)
{
   var iframe = document.createElement("iframe");
   iframe.src = "Downloader.ashx?id=" + parm;
   iframe.style.display = "none";
  document.body.appendChild(iframe);
}

Il Javascript non fa altro che creare un tag iframe, impostare come src il nostro handler ed aggiungerlo alla pagina. In questa maniera noi possiamo tranquillamente aggiungere ad un bottone che si occupa di scaricare il file il seguente codice:


ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "download", "GetFile('5648752168497');", true);

che "dice" allo scriptmanager della pagina di eseguire la funzione Javascript GetFile passandogli come parametro (in questo esempio un numerone di prova) un qualcosa che vi permetta di capire quale file scaricare.

 

Il codice di esempio lo potete scaricare da qui

Print | posted on venerdì 12 ottobre 2007 11.55 | Filed Under [ ASP.NET AJAX Tips ]

Feedback

Gravatar

# re: ASP.NET AJAX File Download

Personalmente non mi piacciono molto gli iFrame, e se li uso è perchè proprio non ho alternative.
Io personalmente avrei preferito mettere l'url del httphandler nella proprietà href di un link e avrei valorizzato il target a _blank in modo che lo apra in una nuova pagina e quindi non avrei problemi per il download.

Altra soluzione, se lo devi invocare da server perchè nel client non hai l'id, ritornerei una funzione del tipo

string script = @"window.open('Downloader.ashx?id=5648752168497"','_blank','');";
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), this.ClientID, script, true);

Almeno così ti eviti anche di avere la tua funzione javascript che ti crea gli iFrame ;)
12/10/2007 12.33 | Andrea Dottor
Gravatar

# re: ASP.NET AJAX File Download

....e ti posso dire che hai perfettamente ragione riguardo agli IFRAME....in effetti la prima implementazione che avevo fatto era proprio quella suggerita da te.....il cliente però come al solito ha smontato il tutto chiedendomi:

"...ma non è possibile evitare che agli utenti compaia il blocco dei popup quando scaricano il file..."?

....ed ecco giustificati gli iframe :-)

Grazie del tuo commento comunque!!!!
Belius
12/10/2007 12.51 | Simone Belia
Gravatar

# re: ASP.NET AJAX File Download

Mitico!
Sembra che mi hai letto nel pensiero, avevo esattamente questa necessità!
12/10/2007 13.18 | Alessandro Sorcinelli
Gravatar

# re: ASP.NET AJAX File Download

far fare le cose ad un iframe nascosto è sempre stato l'AJAX dei poveri... :) adesso che FFox lo supporta lo si fa un po' più a cuor leggero, ma qualche tempo fa restringeva l'applicazione al solo IE...
12/10/2007 16.07 | marco
Gravatar

# re: ASP.NET AJAX File Download

kraloyun
kral oyun
oyun
oyunlar
kraloyun
kral oyun
oyun
oyunlar
blog
blogcu
kido
azbuz
facebook
arkadaş
flash games
fotoput
youtube.
31/05/2008 20.16 | kraloyun
Gravatar

# Japanese teens in image clubs.

Japanese teens and fashion in tokyo. Naked japanese teens. Free japanese teens.
Gravatar

# Real incest stories.

Incest girl. Mom incest. Free incest stories. Incest erotic stories. Brother sister incest.
22/06/2008 23.07 | Taboo incest forum.
Gravatar

# re: ASP.NET AJAX File Download

yar yar
25/06/2008 23.56 | sohbet

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 1 and 5 and type the answer here:

Powered by: