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 :

Générer la fenêtre "téléchargement de fichier"


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut Générer la fenêtre "téléchargement de fichier"
    Bonjour tout le monde !

    Voila, je travaille sur un projet web et j'ai besoin de générer un téléchargement de fichier.

    J'ai trouvé du code sur le forum donc voici l'adaptation à mon cas.
    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
     
    string path = Server.MapPath("");
    FileInfo fileInfo = new FileInfo(path + "/App_Data/fichier1.txt");
    FileInfo fileInfo = new FileInfo(@"C:\temp\fichier1.txt");
     
    byte[] buffer = new byte[2048];
    int block;
     
    using (FileStream fs = File.OpenRead(fileInfo.FullName))
    {
             while ((block = fs.Read(buffer, 0, buffer.Length)) > 0)
             {
                      Response.OutputStream.Write(buffer, 0, block);
             }
    }
     
    this.Page.Response.ClearHeaders();
    this.Page.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileInfo.Name));
    this.Page.Response.End();

    Ce code fonctionne, j'ai bien la fenêtre windows qui me demande d'ouvrir ou télécharger le fichier, mais ca ne me suffit pas .

    J'ai dans un cas précis, besoin que le bouton "ouvrir" soit activé automatiquement, cad qu'il faut que dès que ce code se déclenche, il fasse l'ouverture automatiquement, comme si j'avais cliqué moi même sur le bouton "ouvrir".

    Avez vous des idées plz ?

    merci d'avance

  2. #2
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Salut Freud44,
    -> si ton fichier est un fichier texte, pourquoi ne mets-tu pas le contenu dans un div ?
    -> si ce n'est pas le cas, as-tu essayé les balises EMBED ou OBJECT qui te permettent d'intégrer des objets dans ta page ?

    bye
    Nico

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Le fichier txt est un exemple.

    Il faut que ce soit valable pour d'autres types de fichiers, le but au final étant que lorsque ma page s'ouvre, automatiquement, un lien vers un fichier (passé en paramètre) est téléchargé (via la fenêtre de téléchargement) et ouvert directement avec le programme associé.

    Fred

  4. #4
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Qu'en est-il de ma deuxième partie de réponse :
    Citation Envoyé par Nicopilami Voir le message
    -> si ce n'est pas le cas, as-tu essayé les balises EMBED ou OBJECT qui te permettent d'intégrer des objets dans ta page ?
    bye
    Nico

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    C'est une solution, mais elle ne m'intéresse pas,

    Ce que j'ai besoin de re-créér, c'est l'équivalent d'un clic sur un lien hypertexte pointant sur un fichier texte (par exemple) , et qui ouvre automatiquement le programme associé.

    Donc intégrer l'objet à la page n'est pas ce que je veux faire.

    Il faut que lorsque ma page web s'ouvre, que le téléchargement du fichier se fasse, et que juste après, le programme associé s'ouvre.

    J'ai déja reussi à lancer le téléchargement avec la fenêtre de prompt windows, mais j'arrive pas à lancer automatiquement l'ouverture du fichier.

  6. #6
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Le problème ici est que tu veux mélanger des actions serveur (création du fichier) et coté client (clic pour ouverture du lien) ce qui est problématique du coté de la sécurité, mais souvent faisable en utilisant le JS;

    En revanche, ici, que fais-tu si l'extension n'est pas connue du coté serveur (ou client ?), toujours pour raison de sécurité, tu ne pourras de toutes façons pas ouvrir automatiquement une application sur le poste client, mais par contre, il te seras possible de l'afficher dans une fenetre de navigateur web. (d'où ma suggestion de la balise OBJECT)

    Tout au plus, tu peux lui faire ouvrir l'objet dans une nouvelle fenetre en lui envoyant le type de fichier dont il s'agit en en-tete HTTP, mais je ne pense pas que cela corresponde à la totalité de tes attentes...

    Tu as un post qui pourrait peut-etre un peu t'aider ici, mais c'est en VB.NET...

    en gros, utiliser un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim fichier As String = <votre fichier texte>
    Dim repertoire As String = <repertoire serveur où est stocké le fichier>
    Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
    Response.Clear() ' efface les flux du tampon
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
    Response.AppendHeader("Content-Length", fichier_info.Length.ToString()) ' Evite de rajouter des infos indésirables
    Response.ContentType = "application/octet-stream"
    Response.Flush()
    Response.WriteFile(fichier_info.FullName)
    Response.End()
    pour spécifier le type de fichier dont il s'agit, pour l'afficher dans un DIV ou autre element HTML

    bye
    Nico

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Mes extensions sont connues coté client, puisqu'il s'agit de formats tels que tifs,.doc et pdf. Et elles ne changeront pas.

    Tout en sachant que mes postes clients possèdent déja les programmes associés. Je n'aurai quasiment jamais le cas ou l'utilisation de OBJECT sera nécessaire.

    Je regarde de suite ton lien et essaies de coder quelque chose pour voir.

    merci

  8. #8
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Ok, mais à mon avis ce que tu demandes est impossible pour des questions de sécurité, sauf avec l'utilisation d'ActiveX.

    bon courage, tiens nous au courant

    Bye
    Nico

  9. #9
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Nicopilami Voir le message
    Ok, mais à mon avis ce que tu demandes est impossible pour des questions de sécurité, sauf avec l'utilisation d'ActiveX.
    +1

    Heureusement! Quel trou de sécurité sinon.

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

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    En fait je développe une couche supplémentaire d'une application éxistante.

    Et cette dernière utilise les ActiveX.

    Aussi, je me doutais que, question de sécurité je ne pouvais faire ce dont j'avais envie, mais dans le doute, je préfèrais demander .

    Mais si avec des ActiveX, c'est possible, avez vous des pistes? car je ne connais pas trop les Active X...Est cepossible de l'intégrer à ma page aspx.cs ?

    merci d'avance

  11. #11
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    voici quelques liens trouvés en "googleisant", car je n'ai jamais tenté l'experience :

    -How to host ActiveX controls in a Web form (MS website)

    - controles ASP.NET (www.asp.net)


    bye
    Nico

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Sinon, quand on clique sur un lien hypertexte, cela doit déclencher une certaine commande non ? comme un Window.open() ?

    Est il possible autrement, via une ActiveX, d'effectuer cette action ?

  13. #13
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Sinon, quand on clique sur un lien hypertexte, cela doit déclencher une certaine commande non ? comme un Window.open() ?
    window.open est en javascript; si tu veux cette action, il faudra ajouter onclick="window.open..."; Cela dit, l'action du html de base est equivalente si tu spécifies le target (sauf qu'en JS tu pourras préciser le format de ta fenetre et d'autres parametres)

    Cela dit, ca ne solutionnera pas ton probleme car il t'affichera tout de meme ton prompt windows "open or save file as..."

    Citation Envoyé par Freud44 Voir le message
    Est il possible autrement, via une ActiveX, d'effectuer cette action ?
    surement, mais comme j'ignore comment, je laisse les autres te répondre.

    bye
    Nico

  14. #14
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    ok.

    Merci pour ton aide !

  15. #15
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Ce que tu veux faire est impossible : forcer un clic sur le boutton ouvrir de la fenetre d'alerte du navigateur.

    Par contre, l'idée donnée plus haut est trés bonne. Tu ouvres une autre fenetre dans une popup javascript. Et dans cette fenetre au lieu de lui filer une page standadr tu modifies les headers. Par défaut, les programmes associés s'ouvriront pour traiter ta demande.

    Cette facon de faire a evidemment ses limites car tu ne maitrises pas la configuration du poste client. Il faut donc t'attendre à voir pour par exemple l'ouverture d'un ficheir excel à avoir certains postes qui iront chercher Excel pour ouvrir ton fichier tandis que d'autres utiliseront le navigateur pour faire la meme chose.

    Bon courage à toi en tout cas.

  16. #16
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Voila mon code actuel, a la fin je commence à tout mélanger a force de tester différentes choses.

    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
    namespace SidesWebProject.SidesCustom
    {
        public partial class Test : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
     
     
                    string path = Server.MapPath("");
                    FileInfo fileInfo = new FileInfo(path + "/App_Data/24734.tif");
                    byte[] buffer = new byte[2048];
                    int block;
     
                    this.Page.Response.Clear();
     
     
                    this.Page.Response.AppendHeader("content-disposition", string.Format("attachment; filename={0}", fileInfo.Name));
                    this.Page.Response.ContentType = "force-download";
                    this.Page.Response.Flush();
     
                    this.Page.Response.End();
                }
            }
        }
    }
    Donc, ce code fontionne lorsque ma page "Test.aspx" est appelée, sauf que bien entendu j'ai le prompt qui s'ouvre et me demande de télécharger le fichier.

    Donc Arthis, je ne dois pas être en concordance avec ton post sur le popup javascript.

    Il faut que je modifie mon code...mais comment faire ? merci

  17. #17
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Rebonjour, tu peux utiliser la liste des types MIME disponibles là: [ame="http://fr.wikipedia.org/wiki/Type_MIME"]LIEN[/ame]:

    dont en particulier :

    Type image

    * image/gif : GIF ; Défini dans la RFC 2045 et la RFC 2046
    * image/jpeg : JPEG image JFIF ; Défini dans la RFC 2045 et la RFC 2046
    * image/png : Portable Network Graphics ; Enregistré[5]
    * image/tiff : Tagged Image File Format ; Défini dans la RFC 3302
    * image/vnd.microsoft.icon : icône ICO ; Enregistré[6
    bye
    Nico

  18. #18
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    merci !

    j'ai changé mon type, mais comme d'habitude, je suis obligé de cliquer sur ouvrir.

    Mais j'ai remarqué un bug, mon fichier a ouvrir est vide alors qu'il y avait une vraie image a la base.

    Peut être dois je mettre l'option "BUFFER" à true ?

  19. #19
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Peut être dois je mettre l'option "BUFFER" à true ?
    no idea, je laisse la place aux autres

    Bye
    Nico

  20. #20
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Pour l'histoire de la Popup, après quelques recherches google, je suis tombé sur plusieurs possibilités, qu'il faut que je test...mais je me retrouve bloqué sur une erreur de débutant, sur les chaines de caractères en string.

    je m'explique, pour lancer une popup, je vais faire un response.write(maChaine).

    Sauf que dans maChaine, je dois y insérer du code javascript, donc dans ce code, on y trouve du code de ce style : var str_loc = "ViewFiles.asp?";

    Donc si je dois l'insérer dans une chaine de type String;

    ca donne :

    string strCsharp = "var str_loc = "ViewFiles.asp?";";

    Je me retrouve avec trop de guillemets, et si je compile, j'ai une erreur.

    Je ne peux pas non plus remplacer les " " du javascript par des ' '.

    Avez vous une idée, la je seche sur un truc trop bête...

    merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2008, 17h49
  2. Réponses: 6
    Dernier message: 08/08/2006, 09h14

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