Immagine
 Dopo Prato Piazza è la volta di buttarsi verso Carbonin (Dolomiti Superbike 2012)... di Marco Tenuti
 
"
Un chilo de manco,
un minuto de manco.

(detto dal Marcante commentando così i miglioramenti ottenuti nella cronoscalata della Peri-Fosse)

Marco Tenuti
"
 



Miei sponsor
Gli sponsor che pago io

Social Network



Se vuoi contattarmi via e-mail:

t e n u t i @ l i b e r o . i t
Wikio - Top dei blog
\\ Home Page : Articolo
Sparare un file binario su http Response
Di Marco Tenuti (del 18/07/2013 @ 12:48:23, in web, linkato 1430 volte)

Se avete bisogno di sparare il contenuto di un intero file come output ad una richiesta HTTP, nel caso di vecchi script ASP è necessario tenere in considerazione alcune limitazioni:

  • Response non è disposto a ricevere stecche di byte troppo grandi (anche attraverso il metodo BinaryWrite)
  • Il buffer è acceso per default, quindi la risposta completa potrebbe non gradire "troppi" byte anche durante l'accumulo

Vi consiglio pertanto di procedere in questo modo, se i vostri parametri sono i seguenti:

  • outFileName è il nome del file che volete che compaia all'utente quando il browser gli chiederà di salvare da qualche parte sul suo disco locale
  • fileSize è la dimensione in byte del file da travasare
  • fullPath è il percorso completo nel web server che individua il file da mandare all'utente
  • Response.Clear()
    Response.Buffer = False
    Response.AddHeader "Content-Transfer-Encoding", "binary"
    Response.AddHeader "Content-Disposition", "attachment; Filename=" & outFileName
    Response.AddHeader "Content-Length", CStr(fileSize)
    Response.ContentType = "application/octet-stream; name=" & outFileName
    AttachFileContentToResponse fullPath
    Response.End()
    

    Ora il codice della funzione AttachFileContentToResponse, che non fa altro che attaccare il contenuto del file alla risposta HTTP:

    Sub AttachFileContentToResponse(FileName)
      
      Const adTypeBinary = 1
      Const clChunkSize = 1048576
      Dim oStream, i
    
      Set oStream = Server.CreateObject("ADODB.Stream")
      oStream.Type = adTypeBinary
      oStream.Open
      oStream.LoadFromFile FileName
      
      For i = 1 To oStream.Size \ clChunkSize
        Response.BinaryWrite oStream.Read(clChunkSize)
      Next
      
      If ((oStream.Size Mod clChunkSize) <> 0) Then
        Response.BinaryWrite oStream.Read(oStream.Size Mod clChunkSize)
      End If
    
      oStream.Close
    
    End Sub
    

    Sostanzialmente la funzione non fa altro che salvare il contenuto del file in byte "a pezzetti", semplicemente perché Response.BinaryWrite non è in grado di deglutire stecche troppo grosse. Ho letto in giro che IIS Server 6.0/7.0/7.5 ha un limite predefinito di 4 MB, anche se lo potete sapere interrogandolo attraverso la seguente linea di comando:

    cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit 
    

    Potete comunque modificare tale limite attraverso la SET sullo stesso file adsutil.vbs, collocato generalmente nella cartella ROOTFOLDER/inetpub/AdminScript.

    cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
    

    Una piccola finezza che ho curato nel mio script è quella di prendersi cura di specificare la dimensione totale del file in arrivo nell'header della risposta.

    Response.AddHeader "Content-Length", CStr(fileSize)
    

    Questa finezza consente al browser del visitatore di poter stimare e visualizzare la progressione del download, perché sa a priori quanti byte arriveranno in totale. Se non si specifica il campo Content-Length, il browser non riuscirà a fare tale stima e l'utente avrà una cattiva esperienza, perché non sa quanto aspettare se il file è di svariati MB.

    Articolo Articolo  Storico Storico Stampa Stampa
     
    Nessun commento trovato.

    Anti-Spam: digita i numeri CAPTCHA
    Testo (max 1000 caratteri)
    Nome
    e-Mail / Link


    Disclaimer
    L'indirizzo IP del mittente viene registrato, in ogni caso si raccomanda la buona educazione.


    Ci sono  persone collegate

    Tagcloud

    Gare 2017
    GARE 2017?
    26/03: GF Tre Valli
    30/04: GF del Durello
    21/05: Passo Buole Extreme
    28/05: Soave Bike
    25/06: Lessinia Legend
    Gare 2016
    GARE 2016
    26/06: 6H Valpolicella Fatta
    27/08: GF d'Autunno Fatta
    08/11: XCRunning Grezzana Fatta
    Tickerkm
    KM STORICI

    Km fatti

    Palmares
    BREVETTI E CIRCUITI

    2014: Salzkammergut Survivor
    2012: Prestigio MTB
    2011: Prestigio MTB
    2010: Prestigio MTB, Fizik Veneto
    2008: Garda Challenge

    < agosto 2019 >
    L
    M
    M
    G
    V
    S
    D
       
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
                 

    Cerca per parola chiave
     

    Titolo
    famiglia (4)
    fotografia (1)
    gastronomia (1)
    MTB (14)
    rally (2)
    viaggi (12)

    Le fotografie pił cliccate

    Titolo
    Quale circuito suggerisci al Marcante per il 2013?

     Lessinia Tour
     Prestigio MTB
     Nobili MTB
     Challenge Giordana
     Gare all'estero
     Stare a casa

    Titolo

    View Marco Tenuti's profile on LinkedIn

    Listening
    Kid Rock - Rock n Roll Jesus

    Ghosts - The world is outside

    Hellogoodbye - Zombies! Aliens! Vampires! Dinosaurs!

    Reading
    Fabio Volo - E' una vita che ti aspetto
    Michael Guillen - Le 5 equazioni che hanno cambiato il mondo
    Sophie Kinsella - I love shopping a New York

    Watching
    Mia moglie consiglia Le sorelle McLeod



    Titolo
    .NET Framework (4)
    Abarth (13)
    Alcenago (4)
    auto (16)
    consumatore (57)
    cucina (18)
    cultura (15)
    dizionario (2)
    famiglia (40)
    finanza (4)
    Grezzana (6)
    hitech (17)
    humour (8)
    idee (1)
    informatica (66)
    iPhone (46)
    mobile computing (10)
    MTB (1198)
    musica (4)
    natura (23)
    OS X (3)
    PS3 (7)
    rally (63)
    salute (4)
    social (4)
    telefonia (3)
    Verona (12)
    viaggi (26)
    video (7)
    Visual Basic 6 (5)
    web (49)
    Windows (31)

    Catalogati per mese:
    Agosto 2019
    Luglio 2019
    Giugno 2019
    Maggio 2019
    Aprile 2019
    Marzo 2019
    Febbraio 2019
    Gennaio 2019
    Dicembre 2018
    Novembre 2018
    Ottobre 2018
    Settembre 2018
    Agosto 2018
    Luglio 2018
    Giugno 2018
    Maggio 2018
    Aprile 2018
    Marzo 2018
    Febbraio 2018
    Gennaio 2018
    Dicembre 2017
    Novembre 2017
    Ottobre 2017
    Settembre 2017
    Agosto 2017
    Luglio 2017
    Giugno 2017
    Maggio 2017
    Aprile 2017
    Marzo 2017
    Febbraio 2017
    Gennaio 2017
    Dicembre 2016
    Novembre 2016
    Ottobre 2016
    Settembre 2016
    Agosto 2016
    Luglio 2016
    Giugno 2016
    Maggio 2016
    Aprile 2016
    Marzo 2016
    Febbraio 2016
    Gennaio 2016
    Dicembre 2015
    Novembre 2015
    Ottobre 2015
    Settembre 2015
    Agosto 2015
    Luglio 2015
    Giugno 2015
    Maggio 2015
    Aprile 2015
    Marzo 2015
    Febbraio 2015
    Gennaio 2015
    Dicembre 2014
    Novembre 2014
    Ottobre 2014
    Settembre 2014
    Agosto 2014
    Luglio 2014
    Giugno 2014
    Maggio 2014
    Aprile 2014
    Marzo 2014
    Febbraio 2014
    Gennaio 2014
    Dicembre 2013
    Novembre 2013
    Ottobre 2013
    Settembre 2013
    Agosto 2013
    Luglio 2013
    Giugno 2013
    Maggio 2013
    Aprile 2013
    Marzo 2013
    Febbraio 2013
    Gennaio 2013
    Dicembre 2012
    Novembre 2012
    Ottobre 2012
    Settembre 2012
    Agosto 2012
    Luglio 2012
    Giugno 2012
    Maggio 2012
    Aprile 2012
    Marzo 2012
    Febbraio 2012
    Gennaio 2012
    Dicembre 2011
    Novembre 2011
    Ottobre 2011
    Settembre 2011
    Agosto 2011
    Luglio 2011
    Giugno 2011
    Maggio 2011
    Aprile 2011
    Marzo 2011
    Febbraio 2011
    Gennaio 2011
    Dicembre 2010
    Novembre 2010
    Ottobre 2010
    Settembre 2010
    Agosto 2010
    Luglio 2010
    Giugno 2010
    Maggio 2010
    Aprile 2010
    Marzo 2010
    Febbraio 2010
    Gennaio 2010
    Dicembre 2009
    Novembre 2009
    Ottobre 2009
    Settembre 2009
    Agosto 2009
    Luglio 2009
    Giugno 2009
    Maggio 2009
    Aprile 2009
    Marzo 2009
    Febbraio 2009
    Gennaio 2009
    Dicembre 2008
    Novembre 2008
    Ottobre 2008
    Settembre 2008
    Agosto 2008
    Luglio 2008
    Giugno 2008
    Maggio 2008
    Aprile 2008
    Marzo 2008
    Febbraio 2008
    Gennaio 2008
    Dicembre 2007
    Novembre 2007
    Ottobre 2007
    Settembre 2007
    Agosto 2007
    Luglio 2007
    Giugno 2007
    Maggio 2007
    Aprile 2007
    Marzo 2007
    Febbraio 2007
    Gennaio 2007
    Dicembre 2006
    Novembre 2006
    Ottobre 2006
    Settembre 2006
    Agosto 2006
    Luglio 2006
    Giugno 2006
    Maggio 2006
    Aprile 2006
    Marzo 2006
    Febbraio 2006
    Gennaio 2006
    Dicembre 2005
    Novembre 2005
    Ottobre 2005
    Settembre 2005
    Agosto 2005
    Luglio 2005
    Giugno 2005
    Maggio 2005
    Aprile 2005
    Marzo 2005
    Febbraio 2005
    Gennaio 2005
    Dicembre 2004

    Gli interventi pił cliccati

    Ultimi commenti:
    california fun place...
    20/08/2019 @ 03:24:40
    Di Lonna
    https://www.curcuma....
    13/08/2019 @ 00:53:47
    Di Vernon
    Milan
    12/08/2019 @ 05:37:18
    Di Enriqueta
    syracuse fun center
    08/08/2019 @ 18:02:07
    Di Estelle
    fun jobs near me
    08/08/2019 @ 10:41:49
    Di Dann
    https://www.yourluxu...
    08/08/2019 @ 08:43:27
    Di Chang
    Teri
    06/08/2019 @ 15:05:29
    Di Hyman
    https://hoteladvisor...
    06/08/2019 @ 15:03:20
    Di Jeannette


    24/08/2019 @ 08:40:23
    script eseguito in 94 ms