Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30

    Problema con Download file

    Salve,
    ho una funzionalità di download che deve permettere di scaricare file senza che venga coperta la pagina corrente.

    Fino a quando sono file di tipo excel tutto ok, ma se provo a scaricare immagini o file pdf, quello che succede è che i file vengono aperti all'interno del browser sostituendo la pagina corrente.

    La parte di codice che richiamo per il download del file, è la seguente:

    HttpContext.Current.Response.Redirect(path + fileName);
    qualcuno sa suggerirmi un modo per impedire che file come immagini e pdf vengano aperti nel browser? L'ideale sarebbe avere la classica dialog di "salva con nome", o comunque, se non fosse possibile, aprirli in una finestra/popup secondaria, in modo da evitare che venga coperta la pagina principale

    Grazie in anticipo a che mi da una mano .

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ma perchè fai due redirect in fila ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da djciko
    ma perchè fai due redirect in fila ?
    Ciao,
    scusa, non mi ero accorto, in effetti il codice è solo il seguente:

    HttpContext.Current.Response.Redirect(link + fileName);
    grazie per avermelo fatto notare .

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da pietro09
    http://forum.html.it/forum/showthrea...ownload+sicuro
    Ciao Pietro,
    ti ringrazio, ho convertito lo script proposto in c# e provato, ottenendo il seguente codice:


    Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName.Name + "'_'");
    Response.AddHeader("Content-Length", fileName.Length.ToString());
    Response.WriteFile(path + fileName);
    Response.End();
    funziona perfettamente, tuttavia non mi sembra un soluzione "elegantissima", quello che si fa in pratica è andare a nominare il file in modo tale che il tipo non venga riconosciuto dal browser che, non trovando applicazioni per aprirlo, propone la tanto ambita dialog di "salva con nome".

    Ciò comporta però una successiva rinomina del file da parte dell'utente dopo il download.

    Non c'è un altro modo per farlo? Gli utenti che utilizzeranno la funzionalità hanno conoscenze informatiche pari a 0, per cui vorrei rendere le operazioni il meno laboriose possibile.

    Grazie comunque

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Io andrei cauto con certe affermazioni. Ti spiego. E' un codice trovato tanto tempo fa in AspItalia, col nome download sicuro. Prima per asp e poi per asp.net.
    Quello che fa è obbligare il browser a chiedere se salvare il file o aprirlo e serve soprattutto a non fare vedere all'utente il percorso del file.
    Pietro

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Originariamente inviato da pietro09
    Io andrei cauto con certe affermazioni. Ti spiego. E' un codice trovato tanto tempo fa in AspItalia, col nome download sicuro. Prima per asp e poi per asp.net.
    Quello che fa è obbligare il browser a chiedere se salvare il file o aprirlo e serve soprattutto a non fare vedere all'utente il percorso del file.
    Scusami pietro,
    a quale affermazione ti riferisci?
    Definivo la soluzione poco "elegante" in relazione al contesto in cui mi trovo ed alle esigenze espresse dagli utenti, lungi da me voler essere offensivo verso chi si adopera per proporre soluzioni , se ho dato quest'impressione chiedo venia.

    Comunque sia, mi correggo da solo:

    Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName.Name + "''");
    Response.AddHeader("Content-Length", fileName.Length.ToString());
    Response.WriteFile(path + fileName);
    Response.End();

    non modificando il nome del file nel "Content-Disposition" funziona comunque tutto alla grande .

    Grazie ancora, preziosissimo.

    Ciao.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non ti ho rimproverato per niente. Era solo un invito a giudicare solo dopo aver provato. Ciao.
    Pietro

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    30
    Salve,
    purtroppo facendo ulteriori test, mi sono accorto che utilizzando questo metodo tutti i file che scarico vengono corrotti (jpg,pdf,excel etc. etc.), il file viene salvato regolarmente, ma sembra che le dimensioni siano sempre inferiori a quelle effettive, non riesco mai ad aprirli, qualcuno mi sa spiegare come mai?

    Grazie comunque per l'aiuto.

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questo l'ho appena provato. Scarico un file tif e verifico la lunghezza 30.269.440 byte e funziona benissimo

    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim messaggioErrore As String = ""
            Dim filePath As String = "C:\dati\ProveNikon\3.tif"
    
            Dim fi As FileInfo = New FileInfo(filePath)
            If Not fi.Exists Then
                messaggioErrore = "file non esistente"
            End If
    
            
    
            ' imposta le headers 
            Response.Clear()
            Response.AddHeader("Content-Disposition", "attachment; filename=""" & fi.Name & """")
            Response.AddHeader("Content-Length", fi.Length.ToString())
            Response.ContentType = "application/octet-stream"
    
            ' leggo dal file e scrivo nello stream di risposta 
            Response.WriteFile(filePath)
            Response.End()
    
            
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
        </form>
    </body>
    </html>
    Pietro

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.