Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    download file funzionale ma imperfetto!!!

    Ciao ragazzi, avevo una curiosità:
    Ho una lista di file, di vario genere che vorrei, tramite un link(semplice testo "download") o meglio un link per ciascun file, far scaricare agli utenti del mio sito. Premetto che non ho idea di come funzionino i database, e premetto anche che ho scoperto come far scaricare questi file singolarmente, e come associargli il programma(pdf, doc, ppt, ecc...) o meglio l'ho fatto per un file solo, visto che il metodo che ho adottato sfrutta un file download.asp associato al file stesso.
    In questo modo però dovrei avere un file downlaod.asp per ogni file da scaricare....bel pacco!!!!!
    Inoltre non so come fare a scrivere nella pagina di salvataggio il nome del file, visto che mi di default mi da "downlaod"

    Sapreste aiutarmi con un unico file che avvii la procedura di download per qualsiasi file da me selezionato per poter essere scaricato, riconoscendo il tipo di file e il nome?
    Si può fare o è utopia?

    Posto qui di seguito il codice che uso io:

    Nella pagina html, dove metto il link che desidero abilitare per il download(per esempio un power point) scrivo questo:
    download

    La pagina download.asp è invece fatta così:

    <%@LANGUAGE="VBSCRIPT"%>
    <html>
    <head>
    <title>download</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>

    <%
    ' Recupero il file da scaricare
    Dim download, F
    F = Request.QueryString("file")

    ' Creo l'oggetto ADODB.Stream
    Set download = Server.CreateObject("ADODB.Stream")

    ' Apro la connessione e carico il file
    download.Type = 1
    download.Open
    download.LoadFromFile Server.MapPath(F)

    ' Aggiungo le intestazioni del tipo di file
    Response.AddHeader "Content-Disposition", "attachment; filename=download" & F
    Response.ContentType = "application/vnd.ms-powerpoint"
    Response.BinaryWrite download.Read

    ' Un po di pulizia...
    download.Close
    Set download = Nothing
    %>


    </body>
    </html>

    In "filename=download" ho provato a mettere "Filename=nomefile" ma al momento di salvarlo su pc mi dice sempre download
    A volte nella vita è meglio tener la bocca chiusi e passare per idioti, che aprirla e togliere ogni dubbio!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Modifica così:
    codice:
    Response.AddHeader "Content-Disposition", "attachment; filename="& F
    sempre che F restituisca il nome del file solamente esempio: presentazione.ppt
    altrimenti se restituisce un percorso virtuale non ti apparirà alcun nome.

    Comunque ti consiglio di fare così, al fine di non avere prob con file grandi e avere informazioni più complete nella finestra di avvio download:
    codice:
    ...
    Response.AddHeader "Content-Disposition", "attachment; filename="& replace(F, " ", "")
    Response.AddHeader "Content-Length", download.Size
    Response.Charset = "UTF-8"
    
    Do While Not download.EOS
    	Response.BinaryWrite download.Read(1024)
    	Response.Flush()
    Loop
    
    ' Un po di pulizia...
    download.Close
    Set download = Nothing
    Fammi sapere.

    ciao

  3. #3
    Ciao, grazie mille per la tua tempestiva risposta. ho appena provato ma nisba, parte la finestra di salvataggio, ma appena accetto e chiede la destinazione mi mette come nome "download" e come tipo di file "HTML", ho fatto il collegamento ad un secondo file ma non mi da "pagina non trovata"
    A volte nella vita è meglio tener la bocca chiusi e passare per idioti, che aprirla e togliere ogni dubbio!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    vai a questo thread:
    http://forum.html.it/forum/showthrea...readid=1159832

    Ho postato il codice completo per il tuo caso, con spiegazioni più dettagliate.

    Fammi sapere e vediamo se risolviamo.

    ciao

  5. #5
    Intanto ancora grazie
    però....mmmmm....., peggio di prima, adesso quando clicco sul link per scaricare mi da "impossibile visualizzare la pagina"

    Nella pagina da dove parte il download, che prima era in html e ora ho rinominato in asp, ho messo
    <a href="stream.asp?download=file.pdf>Clicca per scaricare il file</a>
    naturalmente al posto di file.pdf ho messo il power point in questione

    Poi ho creato la pagina stream.asp mettendo quello scritto nell'altro thread, ho aggiunto il case per il file . ppt così
    CASE ".ppt" : FType = "application/vnd.ms-powerpoint"

    e mettendo .jpeg nella seconda riga del case al posto del semplice "jpeg"(sicuro l'avrai dimenticato scrivendo di corsa)

    poi ho messo ne "il percorso" la cartella dove si trovano i file da scaricare(toppato) e poi mettondo il singolo file da scaricare. Nisba in entrambi i casi: pagina bianca!
    A volte nella vita è meglio tener la bocca chiusi e passare per idioti, che aprirla e togliere ogni dubbio!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Qui non vedo alcun errore per il CASE SELECT:
    codice:
    ...
    CASE ".jpg", "jpeg" : FType = "image/jpg"
    ...
    Dove credi di aver visto l'errore per la .jpg?
    Puntualizzo che la virgola "," nella sintassi del SELECT CASE è
    vista come operatore logico di disgiunzione "OR".

    Ora provo il codice e ti faccio sapere comunque.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Sull'altro THREAD metto un link che redireziona a questo post.

    ho rivisto il codice, seguono istruzioni e info.

    Provato, testato e funzionante.

    NOTE - IMPORTANTI:
    Con questo sistema riuscite a leggere i file (immagini, ecc...) situati in cartelle con permessi di lettura disabilitati!

    Infatti togliendo dalla console IIS i permessi di lettura potete proteggere le immagini nel caso in cui qualche utente, facoltoso, riesca a risalire al percorso completo!

    In questo modo tramite l'oggetto strem dell'activex ADO e i permessei di lettura disabilitati potete leggere ed inviare tutti i dati che volete, essendo sicuri che immagini e documenti all'interno di una data cartella sono protetti.

    ricordate sia con il tag anchor<a></a> e <img> di usare la pagina download.asp
    ISTRUZIONI:

    questa è la pagina per visualizzare una foto e scaricarla:
    codice:
    <html>
    
    <head>
    <title>ADO.STREAM</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    <div style="text-align: center;width: 400px;border: #AAAAAA 1px solid;padding: 10px 0px 10px 0px;">
    
    
    <a href="download.asp?download=Scarpe.jpg">
    [img]download.asp?download=Scarpe.jpg[/img]
    <span style="text-align: center;display: block;">Clicca per scaricare il file</span></a>
    
    
    
    
    <form action="download.asp" method="post" style="margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px;">
    <input type="text" name="download">
    <input type="submit" name="avvia" value="Clicca per scaricare il file">
    </form>
    </div>
    </body>
    </html>
    questo è lo script STREAM, nominate la pagina "download.asp":
    codice:
    <%
    response.buffer = True 'importante
    
    IF len(request.querystring("DOWNLOAD")) > 0 THEN
        call downloadForzato(request.querystring("DOWNLOAD"))
    ELSE IF len(request.form("DOWNLOAD")) > 0 THEN
               call downloadForzato(request.form("DOWNLOAD"))
            ELSE
               response.redirect("elenco.asp")
            END IF
    END IF
    
    '**************** PROCEDURA PER L'invio del file al client **********
    Sub downloadForzato(down)
    DIM FType, objStream, percorso
    'La cartella di esempio è nominata "cartellaImmagini"
    'Il percorso virtuale assoluto
    percorso = (server.MapPath("cartellaImmagini/" & down))
    
    'Assegno il MIME TYPE
    FType = LCase(right(down, 4))
    SELECT CASE FType
         CASE ".asf" : FType = "video/x-ms-asf"
         CASE ".jpg", "jpeg" : FType = "image/jpg"
         CASE ".pdf" : FType = "application/pdf"
         CASE ELSE : FType = "application/octet-stream" 'Generico
    END SELECT
    
    Set objStream = Server.CreateObject ("ADODB.Stream")
    objStream.type = adTypeBinary
    objStream.Open
    objStream.LoadfromFile (percorso)
    
    Response.ContentType = FType
    Response.AddHeader "Content-Disposition", "attachment; filename="& down
    Response.AddHeader "Content-Length", objStream.Size
    Response.Charset = "UTF-8"
    
    Do While Not objStream.EOS
    	Response.BinaryWrite objStream.Read(1024)
    	Response.Flush
    Loop
    	
    objStream.Close
    Set objStream = Nothing
    
    End Sub
    %>
    Fammi sapere ciao.

  8. #8
    FANTASTICOOOOOOOOOOOOOOOOOOO
    FUNZIONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!! !!!
    GRAZIEEEE

    Ho provato per tantissimi tipi di file aggiungendo dei CASE per le rispettive estensioni. ed è come desideravo io....una sola pagina che avvia il download per vari file con varie estensioni
    YEAH
    Ancora Grazie mille dreaman

    P.S.:l'errore a cui mi riferivo io è una cavolata di sintassi....qua

    SELECT CASE FType
    CASE ".asf" : FType = "video/x-ms-asf"
    CASE ".jpg", "jpeg" : FType = "image/jpg"
    CASE ".pdf" : FType = "application/pdf"
    CASE ELSE : FType = "application/octet-stream" 'Generico
    END SELECT

    manca il punto davanti alla scritta jpeg....tutto qua
    A volte nella vita è meglio tener la bocca chiusi e passare per idioti, che aprirla e togliere ogni dubbio!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    non è un errore. infatti prelevo le ultime 4 lettere dal nome del file, ecco perchè è omesso il punto, prendo le ultime 4 lettere del nome del file, per recuperare l'estensione con la funzione:
    FType = LCase(right(down, 4))

    ecco perchè l'esensione la confronto così:
    .jpg - 4 lettere
    jpeg - 4 lettere, con il punto sarebbero 5 lettere

    questo vale anche per altre estensioni che superano con il punto le 4 lettere.
    Spero di essere stato chiaro.

    Mi fa piacere mettere a frutto quello che per altro anche io ho imparato grazie a questa community.

    E' un piacere scambiare conoscenza.

    ciao

  10. #10
    Ah Ok
    Adesso ho ho capito, in effetti quella funzione non mi era molto chiara, adesso ho realizzato.
    Grazie ancora
    A volte nella vita è meglio tener la bocca chiusi e passare per idioti, che aprirla e togliere ogni dubbio!!!

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.