Forse avevo già sollevato la questione ma non trovo il thread.
Principalmente per non mettere in chiaro il percorso dei files che un utente può scaricare da un sito ma non solo, mi sono fatto una pagina downloader.ashx che, ricevendo in querystring alcuni parametri, restituisce all'utente un file (variabile, non sempre il medesimo) con il corretto contenttype.
Ora funziona più o meno tutto ma ho dei comportamenti diversi a seconda del tipo di file restituito: nel caso del .pdf, ad esempio, il file acrobat si apre nel browser anche se nella barra dell'indirizzo vedo la mia pagina downloader.ashx con i parametri in querystring... e mi va bene perchè a quel punto l'utente può decidere se salvarsi il file con nome o meno.
Nel caso di un file .zip invece mi propone la mascherina di download del file, winzip come applicazione per l'apertura, ma il nome del file da scaricare è downloader.ashx.
In altri casi la cosa è più fastidiosa, ad esempio col .csv (il contenttype credo sia text/plain) mi propone ancora la mascherina di download, nome del file ancora downloader.ashx e l'applicazione da utilizzare per l'apertura mi viene proposto VisualStudio10...
Il contenuto del file è sempre corretto, cioè io che so che cosa contiene lo posso aprire con l'applicazione giusta e vedo che contiene i dati corretti, ma un utente che non sa che tipo di file gli sta arrivando avrà sempre problemi ad aprire un file che si chiama downloader.ashx e che magari in realtà contiene uno zip o un csv...
Downloader.ashx, oltre a una serie di altre operazioni/controlli, alla fine fa questa operazione qui:
C'è modo di controllare il nome del file fornito in output dalla mia pagina?codice:.... Dim nomefile = Mid(fullpath, fullpath.LastIndexOf("/") + 1) sContentType = System.Web.MimeMapping.GetMimeMapping(nomefile) context.Response.Clear() context.Response.ContentType = sContentType context.Response.WriteFile(fullpath)