IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[VB.NET] Télécharger un fichier qui se trouve sous la racine


Sujet :

ASP.NET

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut [VB.NET] Télécharger un fichier qui se trouve sous la racine
    Bonjour,

    Qqn a-t-il une methode? J'ai ceci, mais cela génère des erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Put user code to initialize the page here
            DisplayDownloadDialog("D:\monfichier.xls")
        End Sub
     
        Sub DisplayDownloadDialog(ByVal strFileName As String)
            Dim objFileInfo As System.IO.FileInfo
     
            Try
                If Not System.IO.File.Exists(strFileName) Then Exit Sub
                objFileInfo = New System.IO.FileInfo(strFileName)
                Response.Clear()
                'Response.ClearHeaders()
                'Response.Buffer = True
                'Add Headers to enable dialog display 
                Response.AddHeader("Content-Disposition", "filename=" & objFileInfo.Name)
                Response.AddHeader("Content-Length", objFileInfo.Length.ToString())
                Response.ContentType = "application/octet-stream"
                Response.WriteFile(objFileInfo.FullName)
            Catch ex As Exception
     
            Finally
                Response.End()
            End Try
        End Sub
    Merci
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Peux-tu récupérer le ex.Message dans le catch et nous lister les messages complets d'exceptions levées stp :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    					string strFileLocation = "."+System.Configuration.ConfigurationSettings.AppSettings["HTTPFilesRoot"].ToString();
    					strFileLocation += "/" + strName + " " + strFirstName + "/"  + strFileName;
     
    					string fName = Server.MapPath(strFileLocation);
    					FileStream stream = new FileStream(fName, FileMode.Open,	FileAccess.Read, FileShare.Read);
     
    					FileInfo f = new FileInfo(fName);
     
    					// doc : application/msword
    					// pdf : application/pdf
     
    					string mime = "application/pdf";
    					if(f.Extension.IndexOf("doc")!=-1) mime = "application/msword";
     
    					Response.ContentType = mime;
    					Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(f.Name));
     
    					int bufSize = (int)stream.Length;
    					byte[] buf = new byte[bufSize];
     
    					int bytesRead = stream.Read(buf, 0, bufSize);
    					stream.Close();
     
    					Response.OutputStream.Write(buf, 0, bytesRead);
    Dans l'exemple seul les pdf et les doc sont pris en compte

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    En fait, il n'y a pas d'erreur serveur. Simplement un popup comme quoi il ne peut télécharger le fichier.
    Ceci dit, maintenant, il essaye de tout m'afficher. Les txt passent, mais les xls donnent:
    ÐÏࡱá>þÿ ‰¼íArial1 íArial1 íArial1 íArial1ȼíArial"$"#,##0_);\("$"#,##0\)!"$
    Je donne ma langue au chat.
    Merci
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par Ditch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string strFileLocation =  "."+System.Configuration.ConfigurationSettings.AppSettings["HTTPFilesRoot"].ToString();
    strFileLocation += "/" + strName + " " + strFirstName + "/"  + strFileName;
    Dans l'exemple seul les pdf et les doc sont pris en compte
    Si je ne me trompe, il s'agit de fichiers dans ton site, pas sous la racine, non?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par Immobilis
    En fait, il n'y a pas d'erreur serveur. Simplement un popup comme quoi il ne peut télécharger le fichier.
    Ceci dit, maintenant, il essaye de tout m'afficher. Les txt passent, mais les xls donnent:
    ÐÏࡱá>þÿ ‰¼íArial1 íArial1 íArial1 íArial1ȼíArial"$"#,##0_);\("$"#,##0\)!"$
    Je donne ma langue au chat.
    Merci
    Un .xls c'est pas le meme content-type...

    "HTTPFilesRoot" est un paramètre que j'ai dans le webconfig. Ca revient au meme quelque soit le répertoire. Tu mets MapPath("fichier.xls") et voilà.

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Le résultat est le mm qd je mets ce type : application/vnd.ms-excel
    Il trouve bien le fichier, mais j'ai pas la boite de download.


    Ditch, avec ta methode en VB ça me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        Sub DisplayDownloadDialog(ByVal strFileName As String)
            Dim objFileInfo As System.IO.FileInfo
            Dim objStream As System.IO.FileStream
     
            Try
                If Not System.IO.File.Exists(strFileName) Then Exit Sub
                objFileInfo = New System.IO.FileInfo(strFileName)
                objStream = New System.IO.FileStream(strFileName, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
     
                'Response.Clear()
                Response.ClearHeaders()
                Response.Buffer = True
                'Add Headers to enable dialog display 
                Response.AddHeader("Content-Disposition", "attachment;filename=" & objFileInfo.Name)
                Response.AddHeader("Content-Length", objFileInfo.Length.ToString())
                Response.ContentType = "application/vnd.ms-excel"
     
                Dim bufsize As Integer = objStream.Length
                Dim buf(bufsize) As Byte
                Dim byteread As Integer = objStream.Read(buf, 0, bufsize)
                objStream.Close()
     
                Response.OutputStream.Write(buf, 0, byteread)
     
            Catch ex As Exception
                Response.Write(ex.Message & "<br><br>")
     
            Finally
                Response.End()
            End Try
    Pourtant, j'ai encore
    ÐÏࡱá>þÿ ‰


    J'ai eu ce pb en ASP. La raison était que du HTML etait inséré dans la page. Dans mon cas, j'ai fait une page aspx dans laquelle j'ai tout supprimé sauf les infos d'heritage of course. Mais est-ce la bonne méthode?
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Ce que je t'ai montré c'est simplement dans le Page_Load. Dans ma page, je n'ai rien.

    http://webman.developpez.com/article.../aspnet2excel/ pourra t'aider...

    Là il exporte un DataGrid, mais il "suffit" d'envoyer ton fichier à la place.

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Bon, ben ça marche, je sais pas ce qu'il lui a pris. Peut-être un pb de cache.

    Toutefois, il me met le nom de la page comme nom de fichier au lieu du nom du fichier. Sais-tu pourquoi?

    Sinon, il faut aussi que je récupère dynamiquement le content-type. Je viens de constater que tu es l'auteur de l'article : Comment récupérer le content-type d'un fichier?
    J'ai copié collé le code et il me met
    Variable 'Keyname' hides a variable in an enclosing block.
    Apparement, il y a un pb de variables. Voici le code qui ne génère pas d'erreurs chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Public Shared Function GetMIMEType(ByVal filepath As String) As String
            Dim regPerm As RegistryPermission = New RegistryPermission(RegistryPermissionAccess.Read, "\HKEY_CLASSES_ROOT")
            Dim classesRoot As RegistryKey = Registry.ClassesRoot
            Dim fi As FileInfo = New FileInfo(filepath)
            Dim dotExt As String = fi.Extension.ToLower
            Dim typeKey As RegistryKey = classesRoot.OpenSubKey("MIME\Database\Content Type")
            Dim myContentType As String = ""
     
            For Each myKeyname As String In typeKey.GetSubKeyNames
                Dim curKey As RegistryKey = classesRoot.OpenSubKey("MIME\Database\Content Type\" + myKeyname)
                If CType(curKey.GetValue("Extension"), String) = dotExt Then
                    myContentType = myKeyname
                End If
            Next
     
            Return myContentType
    La declaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Keyname As String = ""
    est de trop. Il faut aussi utiliser celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim myContentType As String = ""
    pour passer la valeur.
    De plus, apparement, par défaut les type msg ne sont pas configurés dans les type MIME. J'ai essayé de l'ajouter en passant par les options des dossiers, mais ça marche pas. Sais-tu comment faire?

    Merci de ton aide
    "Winter is coming" (ma nouvelle page d'accueil)

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par Immobilis
    Toutefois, il me met le nom de la page comme nom de fichier au lieu du nom du fichier. Sais-tu pourquoi?
    Il faut mettre le nom du fichier, pas le chemin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.AddHeader("Content-Disposition", "attachment; filename=" & objFileInfo.Name.ToString())
    Le chemin vers le fichier est déclaré à l'ouverture du "stream":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objStream = New System.IO.FileStream(strFilePath, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
    "Winter is coming" (ma nouvelle page d'accueil)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment declarer un fichier qui se trouve sous un chemin
    Par helkha86 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 11/05/2012, 08h23
  2. Réponses: 2
    Dernier message: 08/05/2012, 12h39
  3. Réponses: 2
    Dernier message: 31/07/2008, 10h07
  4. Réponses: 3
    Dernier message: 23/09/2007, 19h12
  5. Réponses: 32
    Dernier message: 28/08/2007, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo