Designed by NoKi !
118 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter






   

Télécharger des fichiers

ou les ouvrir avec une autre application





Didier
Lorsque l'on veut permettre le téléchargement d'un fichier .zip il suffit de faire un lien simple <A href="monfichier.zip"> Télécharger </A>, mais lorsqu'il s'agit d'un autre type, .txt par exemple, c'est une autre affaire... le navigateur l'ouvre et affiche son contenu... Alors comment faire pour le télécharger ou l'ouvrir avec MSWord ou MSExcel ? En précisant le "content-type" MIME dans l'en-tête de la page...


ASP - PHP - .NET - Questions - Démo


Les types MIME (Multi-purpose Internet Mail Extensions) sont une extension des types de données transportés par le protocole SMTP (Simple Mail Transfer Protocol) prévu à l'origine pour ne transférer que des fichiers textes mais qui, avec l'apparition du multimédia, a dû permettre l'échange de fichiers binaires (bureautique, images, sons, fichiers compressés).

Avec MIME, il est possible d'échanger des fichiers entre des machines quelconques (Unix, PC, MAC) : celle qui reçoit ces informations connait le type de fichier et peut l'associer à une application installée sur cette machine. Elle sera donc capable de présenter les données reçues de la façon la mieux adaptée :
  • vous recevez un son, la machine vous le joue ;
  • vous recevez une image, vous pouvez la visualiser ;
  • vous recevez un fichier HTML, vous pouvez le lire dans votre navigateur ;
  • vous recevez un fichier DOC, c'est MSWord qui l'ouvrira ;
  • etc...


Alors comment faire justement sur une page web pour tricher avec ce type MIME et décider que telle application doit ouvrir mon fichier d'extension quelconque ? En transmettant à l'en-tête de la page (Header), le "content-type" correspondant aux fichiers généralement ouverts par l'application que l'on veut lancer :)


Envie de tester la démo ?


Les scripts


download.asp 
<%
if request("dwn")<>"" then
   
   response.clear() ' Vide le buffer

   ' Dialogue de téléchargement
   response.contentType = "application/octet-stream"
   ' seulement pour application/octet-stream !
   response.addHeader "Content-Disposition","attachment; filename=" & request("dwn")

   ' Ouvrir avec MSWord
   ' response.contentType = "application/msword"
   ' Ouvrir avec MSExcel
   ' response.contentType = "application/vnd.ms-excel"
   ' Ouvrir en Text
   ' response.contentType = "text/plain"

   response.flush() ' Envoie le buffer

   ' Lecture du fichier
   set FSO = Server.CreateObject("Scripting.FileSystemObject")
   set inF = FSO.OpenTextFile(server.mapPath(request("dwn")),1,false)
   t = inF.readAll
   inf.close

   response.write(t) ' Envoie le contenu du fichier

else%>


   <A href="download.asp?dwn=download.asp">Test</A>

<%end if%>


download.php 
<?
if($dwn=$_GET["dwn"]) {
   
   $dwn = str_replace("../","",$dwn);

   // ob_clean(); // Vide le buffer (v >= 4.2)

   // Dialogue de téléchargement
   header("content-type: application/octet-stream");
   // seulement pour application/octet-stream !
   header("Content-Disposition: attachment; filename=".$dwn);

   // Ouvrir avec MSWord
   // header("content-type: application/msword");
   // Ouvrir avec MSExcel
   // header("content-type: application/vnd.ms-excel");
   // Ouvrir en Text
   // header("content-type: text/plain");

   // voir aussi http://dev.nexen.net/scripts/details.php?scripts=354

   flush(); // Envoie le buffer

   readfile($dwn); // Envoie le fichier

} else { ?>


   <A href="download.php?dwn=download.php">Test</A>

<? } ?>


download.aspx 
<%@ import namespace="System.IO" %>

<script language="vb" runat="server">

   Sub Page_Load(source As Object, e As EventArgs)

      Dim dir As String = Request.MapPath(".")
      Dim f As String = Request.QueryString("dwn")

      If f <> "" then

         Response.Clear() ' Vide le buffer

         ' Dialogue de téléchargement
         Response.ContentType="application/octet-stream"
         ' seulement pour application/octet-stream !
         Response.AddHeader("Content-Disposition","attachment; filename=" & f)

         ' Je n'ai pas encore réussi à le faire fonctionner avec d'autres types
         ' Si quelqu'un trouve comment...

         ' Ouvrir avec MSWord
         ' Response.ContentType = "application/msword"
         ' Ouvrir avec MSExcel
         ' Response.ContentType = "application/vnd.ms-excel"
         ' Ouvrir en Text
         ' Response.ContentType = "text/plain"

         Response.Flush() ' Envoie le buffer

         Response.WriteFile(dir & "\" & f) ' Envoie le contenu du fichier

      Else

         Response.write("<A href=""download.aspx?dwn=download.aspx"">Test</A>")

      End If

   End Sub

</script>


A lire aussi

  • Compter le nombre de téléchargements
  • Récapitulatif des types MIME les plus rencontrés
  • Liste des types MIME officiels ou reconnus
  • How to Protect Your Images from Bandwidth Thieves

  • Pour pouvoir écrire dans ce forum, identifiez-vous !

     Lire  22/02/10 12:03 de marion
    bonjour j'ai modifier le script pour pouvoir telechar...
  • 22/02/10 12:48 de DB77 Pourquoi deux header content-type ? Si tu ...
  • 22/02/10 15:44 de marion ok j ai enelever le 2ème header le probl...
  • 22/02/10 16:23 de DB77 Chez moi, ce code : ============== <?php ...
  •  Lire  22/06/09 10:16 de nonosat
    svp dite_moi les étapes a suivre pour pour deconnect...
  • 22/06/09 10:24 de DB77 Tutorial >> ASP-PHP >> Premiers pas Et tu ...
  •   v1.3p © ASP-PHP.net 2002  

    Didier le 30/12/2002 (224 964 hits)
    Didier Téléchargez gratuitement et légalement des logiciels Microsoft ! Si, si ;)
    • Visual Studio 2010
    • Office 2010
    • Expression Studio 3
    • SQL Server 2008
    • et d'autres...
    Au fil des news  
    Magazines - Le N°128 de Programmez est disponible
    Magazines - Le N°127 de Programmez est disponible
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
    Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
    Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
    JavaScript - Ajouter une page dans vos favorites
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
    Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
    SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
    Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
    Magazines - Le n°126 de Programmez est disponible
    Outils - Traducteur en ligne automatique pour site web
    Adobe - Adobe Photoshop.com Mobile pour Iphone
    Magazines - Le n°125 de Programmez est disponible
    Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
    Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
    Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
    Magazines - Le n°124 de Programmez est disponible
    PHP - Forum PHP 2009
    Composants - eFace - XAML en Java
    WPF - Désactiver le bouton de réduction d'une fenêtre
    Magazines - Le n°123 de Programmez est disponible
    Magazines - Le n°122 de Programmez est disponible
    Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
    Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
    SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
    Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
    Magazines - Le HS N° 1 de Web Design est disponible
    Adobe - Adobe propose en Open Source les frameworks.....
    Outils - EntityBuilder
    CSharp - Sérialisation XML de vos objets
    Magazines - Le n°121 de Programmez est disponible
    Adobe - Adobe annonce MAX 2009 !
    Outils - WhoIs
    [MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
    Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
    PHP - News avec photo - Système de gestion - affichage
    Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
    Outils - Crypt
    Dreamweaver Php Mysql - Région répétée imbriquée
    Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
    Magazines - Le n° 120 de Programmez est disponible
    Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
    Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
    PHP - Le Coach PHP sur Visual Studio
    .NET - Ecrire une application .NET utilisant MySQL
    PHP - Utilisation de PHP dans le monde Microsoft
    Magazines - Le n° 119 de Programmez est disponible
    Adobe - Adobe annonce Photoshop Marketplace
    [MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
    Mis à jour le 20/04/2009
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3b © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     TechNet ASP-magazine DotNet Project Groupes Utilisateurs Microsoft MVP