2 votes

comment utiliser la boîte de dialogue d'enregistrement pour télécharger des fichiers

Dans mon projet, j'ai un dossier contenant un nombre N de fichiers. J'ai besoin d'une fonctionnalité permettant à la page d'avoir des liens pour tous ces fichiers afin que le client puisse les télécharger.

Pour cela, j'ai créé dynamiquement des boutons de lien et lié chaque fichier avec chaque bouton de lien.

Le code est le suivant

 string filePath = Request.PhysicalPath.Substring(0, Request.PhysicalPath.LastIndexOf("\\"));
        filePath = filePath.Substring(0, filePath.LastIndexOf("\\"));
        filePath = filePath.Substring(0, filePath.LastIndexOf("\\")) + "\\Export";

        string[] files = System.IO.Directory.GetFiles(filePath);
        Array.Sort(files);
        Array.Reverse(files);
        int counter = 0;
        foreach (string file in files)
        {
            if (counter >= 10)
                break;
            LinkButton linkButton = new LinkButton();
            int startIndex = Convert.ToInt32(file.LastIndexOf("\\"));
            int length = Convert.ToInt32(file.Length);
            string fileName = file.Substring(startIndex + 1, length - startIndex - 1).ToString();
            fileName = fileName.Substring(0, fileName.LastIndexOf("."));
            string[] a = fileName.Split('_');
            string year = a[1].Substring(0, 4);
            string month = a[1].Substring(4, 2);
            switch (month)
            {
                case "01":
                    month = "January";
                    break;
                case "02":
                    month = "February";
                    break;

                case "03":
                    month = "March";
                    break;
                case "04":
                    month = "April";
                    break;
                case "05":
                    month = "May";
                    break;
                case "06":
                    month = "June";
                    break;
                case "07":
                    month = "July";
                    break;
                case "08":
                    month = "August";
                    break;
                case "09":
                    month = "September";
                    break;
                case "10":
                    month = "October";
                    break;
                case "11":
                    month = "November";
                    break;
                case "12":
                    month = "December";
                    break;

            }
            counter++;
            linkButton.ForeColor = System.Drawing.ColorTranslator.FromHtml("#b32317");
            linkButton.Text = month + " " + year + " Car Hire Details";
            //hyperlink.NavigateUrl = file.ToString();
            linkButton.Font.Bold = true;
            //hyperlink.ID = "TestLB";
            linkButton.Command += new CommandEventHandler(this.lb_Command);
            linkButton.CommandArgument = file.ToString();
            Panel1.Controls.Add(linkButton);
            Label lbl1 = new Label();
            lbl1.Text = "<br /> <br />";
            Panel1.Controls.Add(lbl1);

        }

    }

    protected void lb_Command(object sender, CommandEventArgs e)
    {

        System.String filename = e.CommandArgument.ToString();// this is your file name 
        Response.ContentType = "Plain/Text";
        System.String disHeader = "Attachment; Filename=\"" + filename + "\"";
        Response.AppendHeader("Content-Disposition", disHeader);
        System.IO.FileInfo fileToDownload = new System.IO.FileInfo(e.CommandArgument.ToString());
        //filepath to download 
        Response.Flush();
        Response.WriteFile(fileToDownload.FullName);

    }

Mais le problème est que, quand j'essaie de télécharger ça :

  1. Le fichier est téléchargé au format HTML, de plus le nom du fichier téléchargé devient le même que le nom du fichier de mon code alors que je veux le nom réel.

  2. le fichier téléchargé contient les données réelles mais aussi le code html de la page sur laquelle se trouvent ces liens.

Quelqu'un peut-il m'aider à ce sujet ?

2voto

m.edmondson Points 13514

Response.ContentType = "APPLICATION/OCTET-STREAM" ;

C'est votre problème.

Recherchez le type de fichier que vous autorisez à télécharger. ici et le modifier en conséquence.

0voto

rioki Points 2322

Il suffit d'utiliser l'en-tête Content-Disposition tel que décrit dans la RFC 2183. Une recherche rapide sur le sujet sur Google a donné cette page et il semble assez étendu, donc je ne le répéterai pas...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X