Visualizzazione dei risultati da 1 a 6 su 6

Discussione: downloader

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

    downloader

    In asp usavo questa cosa qui che mi permetteva di puntare un file accessibile col FSO e farne il download.... in aspnet fa ancora il suo dovere usando la direttiva di pagina aspcompat="true", ma è "riscrivibile" usando oggetti migliori/più nuovi/più efficienti?

    codice:
        Protected Sub downloader(ByVal nomefile As String)
            Dim PercorsoFile = ConfigurationManager.AppSettings("DDTpath") & nomefile
            PercorsoFile = Replace(PercorsoFile, "/", "\")
            Response.Buffer = True
            Response.Clear()
    
            Dim ADOStream = Server.CreateObject("ADODB.Stream")
            ADOStream.Open
    
            ADOStream.Type = 1  ' Set binary stream
    
            Dim FS = Server.CreateObject("Scripting.FileSystemObject")
            If FS.FileExists(PercorsoFile) Then
                Dim FileStream = FS.GetFile(PercorsoFile)
                Dim DimensioneFile = FileStream.Size
    
                ADOStream.LoadFromFile(PercorsoFile)
    
                nomefile = Mid(PercorsoFile, InStrRev(PercorsoFile, "\") + 1)
                NomeFile = Replace(NomeFile, " ", "_")
                Response.ContentType = "application/octet-stream"
                Response.AddHeader("Content-Disposition", "attachment; filename=" & NomeFile)
                Response.AddHeader("Content-Length", DimensioneFile)
    
                For i = 0 To ADOStream.size
                    i = i + 128000
                    Response.BinaryWrite(ADOStream.Read(128000))
                    Response.Flush()
                Next
    
                FS = Nothing
            End If
        End Sub
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Usa "TransmitFile".

    Da un vecchio progetto (ho provato e funziona), in cui nella stessa cartella della pagina aspx c'e' un file PDF di esempio da scaricare, "Documento.PDF":

    ASPX:
    codice:
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:LinkButton OnClick="LinkButton1_Click" ID="LinkButton1" runat="server">Download PDF</asp:LinkButton>
            </div>
        </form>
    </body>

    VB:
    codice:
       Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
            DownloadFile("Documento.PDF")
        End Sub
    
    
    
        Private Sub DownloadFile(ByVal filename As String)
            Response.Expires = -1
    
    
            Dim strPath As String = Me.Server.MapPath(filename)
            Dim file As FileInfo = New FileInfo(strPath)
    
    
            If file.Exists Then
                Response.Clear()
                Response.AddHeader("Content-Disposition", "attachment; filename=""" & file.Name & """")
                Response.AddHeader("Content-Length", file.Length.ToString())
                Response.ContentType = "application/octet-stream"
    
    
                ' Download del file sul client
                Response.TransmitFile(strPath)
                Response.End()
            Else
                Response.Write("Impossibile scaricare il file.")
            End If
        End Sub

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    L'oggetto FileInfo, questo sconosciuto!
    thank you ;-)

    beh ma se invece di essere nella stessa cartella fosse in un'altra dir qualsiasi non cambierebbe niente (spero), basta fornirgli lo strPath corretto.... right? O vuole il file in una directory del sito?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    L'ho sempre provato con file INTERNI al sito.
    Cioe' presupponendo che l'utente scarichi da una directory in cui ad esempio c'e' la documentazione.

    Con questo presupposto, basta che come parametro, alla Sub, passi un percorso relativo (non passare percorsi assoluti), ad esempio "Documento.PDF" o "\Docs\Documento.PDF", oppure "..\..\Docs\Documento.PDF" per raggiungere una directory due rami piu' esterni alla pagina.

    L'istruzione Server.MapPath poi tradurra' il percorso in C:\...etc.

    Se devi scaricare da un percorso esterno al sito, credo che tu debba solo controllare l'accessibilita' del file dalla pagina di partenza al punto di arrivo.

    PS: Con una share di rete tipo \\Server03-Docs\Documenti\Documento.PDF devi cambiare il codice.

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ...oppure aggiungi un parametro alla Sub in cui le dici se il Path è relativo o assoluto (c:\etc), caso in cui invece di fare Server.MapPath prendi il percorso cosi' come è passato
    Ultima modifica di djciko; 21-10-2016 a 01:28

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    roger
    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.