Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Pagina Downloader

  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    Pagina Downloader

    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:
    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)
    C'è modo di controllare il nome del file fornito in output dalla mia pagina?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    ecco ho trovato il thread... mi ero anche tristemente già dato una risposta
    https://forum.html.it/forum/showthre...ght=downloader
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    nel forum c'e' gia' una risposta riguardo i download lato server, cerca

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    parli di questa?
    https://forum.html.it/forum/showthre...oad+codebehind
    Non so se sono in uno dei casi ivi descritti... io ho un downloader.ashx in radice del sito che a seconda dei parametri ricevuti va a cercare il file nelle directory apposite (non sono esplorabili ma sono raggiungibili con un url) e poi dovrebbe restituirlo all'utente senza fargli vedere tutto il percorso del file.
    L'utente è sempre loggato quindi quel problema non ce l'ho, ho il problema di fare in modo che il file restituito abbia il suo nome corretto (non downloader.ashx) però senza il suo path visibile.
    ...
    Magari non si può fare

    I nomi dei files sono particolarmente incasinati ma sono costruiti con una logica che non è impossibile da decifrare per cui uno con un po' di "pelo grigio", conoscendo il percorso potrebbe andare nella directory a pescare dei files che non dovrebbe vedere... per questo avevo pensato alla pagina intermedia che serve il file senza dire all'utente dove l'ha preso.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Andrà a finire che genererò i nomi dei files con una stringa random di n cifre e buonanotte alla pagina intermedia
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ciao, puoi vedere se questo codice ti funziona?
    codice:
    '---------------------------------------------------------------------------------------------------------------------------------------------------
    'salva buffer di byte nello stream di uscita come attachemt
    '---------------------------------------------------------------------------------------------------------------------------------------------------
    Public Sub SaveDocOutputStreamAttachment(buffer As Byte(), nomeDocumento As String, Optional contentType As String = "application/octet-stream")
        System.Web.HttpContext.Current.Response.Clear()
        System.Web.HttpContext.Current.Response.HeaderEncoding = Encoding.Default
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", String.Format("attachment; filename=""{0}""", nomeDocumento))
        System.Web.HttpContext.Current.Response.AddHeader("Content-Length", buffer.Length.ToString)
        System.Web.HttpContext.Current.Response.ContentType = contentType
        If buffer.Length > 0 Then
            'queste due istruzioni sono equivalenti
            System.Web.HttpContext.Current.Response.OutputStream.Write(buffer, 0, buffer.Length)
            'System.Web.HttpContext.Current.Response.BinaryWrite(buffer)
        End If
    
        System.Web.HttpContext.Current.Response.Flush() : System.Web.HttpContext.Current.Response.End()
    
    End Sub
    codice:
        '=================================================================================
        'application/octet-stream
        'application/pdf
        'application/json
        'application/xml
        'application/zip
        'text/csv
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Pietro

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Brilliant!
    codice:
     
    Dim nomefile = Mid(fullpath, fullpath.LastIndexOf("\") + 1)
    sContentType = System.Web.MimeMapping.GetMimeMapping(nomefile)
    Dim bData As Byte()
    Dim br As System.IO.BinaryReader = New System.IO.BinaryReader(System.IO.File.OpenRead(fullpath))
    bData = br.ReadBytes(br.BaseStream.Length)
    SaveDocOutputStreamAttachment(bData, nomefile, sContentType)
    fa esattamente quello che gli si chiede!
    Grazie!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    pietro in nomination per premio BestUtente2018, concordate ?

    (scherzo, Pietro)

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Quote Originariamente inviata da djciko Visualizza il messaggio
    pietro in nomination per premio BestUtente2018, concordate ?

    (scherzo, Pietro)
    bah! è tutto codice recuperato qui in tanti anni
    Pietro

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    bah! è tutto codice recuperato qui in tanti anni
    Si probabilmente lo avevo scritto io ma me ne ero dimenticato eheheh (dubito molto)
    Rinnovo lode e ringraziamento!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.