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

SQL Procédural MySQL Discussion :

PB downloading des Objets blob d'une base Mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut PB downloading des Objets blob d'une base Mysql
    Bonjour

    j'ai des problèmes pour récupérer des objets Blob d'une base de données mysql.

    J'ai essayé tt les exemples que j'ai trouvé sur Internet mais j'ai tjs le même pb: quand je récupère le fichier sur ma machine, le fichier a une taille de 10 ou 15 kilo et lorsque j'ouvre le fichier ( word ou pdf ou ...) j'aurais le message suivant : " fichier corrompu" !

    j'ai changé les param de php pour permettre de uploader des fichiers d'une grande taille "max_upload_size" dans php.ini mais tjs rien !!!!!!!!!!!

    J'attends votre Aide.

    Merci.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ma boule de cristal me souffle qu'il faut que tu enleves le header content-type.

    Sinon max_upload_size c'est pas pour le "download", mais pour l'upload (d'où son nom je crois)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut tjs le même pb
    j'ai enlevé le

    header("Content-type: $fileType");

    et j'ai laissé seulement :

    echo $fileContent;

    et tjs le même pb !!!!!

    ça fait une semaine que je suis planté là

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Voici la structure de la table :

    #
    # Structure de la table `myblobs`
    #

    CREATE TABLE myblobs (
    blobId int(11) NOT NULL auto_increment,
    blobTitle varchar(50) default NULL,
    blobData longblob,
    blobType varchar(50) default NULL,
    PRIMARY KEY (blobId),
    UNIQUE KEY id (blobId)
    ) TYPE=MyISAM;


    et voici le code de récupération :

    <?php
    // l'identifiant de l'objet
    global $fileId;
    $blobId = $fileId;

    if(!is_numeric($fileId)) die("Invalid blobId specified");

    // Database connection variables
    $dbServer = "localhost";
    $dbDatabase = "base";
    $dbUser = "root";
    $dbPass = "";

    $sConn = mysql_connect($dbServer, $dbUser, $dbPass)
    or die("Couldn't connect to database server");

    $dConn = mysql_select_db($dbDatabase, $sConn)
    or die("Couldn't connect to database $dbDatabase");


    $dbQuery = "SELECT blobType, blobData ";
    $dbQuery .= "FROM myBlobs ";
    $dbQuery .= "WHERE blobId = $blobId";

    $result = mysql_query($dbQuery) or die("Couldn't get file list");

    if(mysql_num_rows($result) == 1)

    {
    $fileType = @mysql_result($result, 0, "blobType");
    $fileContent = @mysql_result($result, 0, "blobData");

    //header("Content-type: $fileType");
    echo $fileContent;
    }
    else
    {
    echo "Record doesn't exist.";
    }

    ?>

    J'attends votre aide !
    Merci.

  5. #5
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 281
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 281
    Points : 1 999
    Points
    1 999
    Par défaut
    As-tu au moins vérifié que le contenu de ton blob était correct ? Fais le test en l'enregistrant dans un fichier.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Comment je fais ça ???

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut RE
    j'ai fait cela :

    // ouverture du fichier en mode lecture- écriture : le pointeur est à la fin du fichier
    $fichier=fopen('c:\a.txt', 'a+');
    // écriture de la ligne
    fwrite($fichier,$fileContent);
    // fermeture du fichier
    fclose ($fichier);

    et voilà le contenu du fichier ( c'est un fichier pdf qui est dans la base) :

    %PDF-1.3
    3 0 obj <<
    /Length 1138
    /Filter /FlateDecode
    >>
    stream
    xÚÕWKs£F¾ûW航–Ѽ˜Ÿ²Îj½vìÚ-*œ²9 ).@ëò%¿=Ý=H–@r•sŠKU 0MOÝ_?$F~b¤5ãjd,-7|”ÁÆõ…èl`XÀí‰=ßjÅìúA BÁ¡L_6b‘Q;5ø¢ÎºÙõÅÕübòY˜‘LH3š¯hkžüéÝ”ÙXiï—jDÂKË< ¯†«¯…ñ’-®Ö+àe•åKÚ-Ü»j¬¯†ç<-[¼ï´p/õQ|ñ7
    ·ã¿æ·Óù b¶Fúd¥˜–räË G§ñì¤e$™´ü#·…wPEÄB¥¡^¥u“ɉÃv5öÁÊ<#HÕÀNaAydÎØ© gR*8

    HELP !!!!!!!!!!!!!!!

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    renomme ce fichier en pdf !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    j'ai fait ça mais ça marche pas.

    Le fichier a une taille de 1 Ko. Bizarre non !!!!!

    Est ce que quelqu'un un exp qui marche . Il l'a testé chez lui et il marche .

    Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut RE
    Je trvaille avec easyPHP 1.6

    Est ce qu'il y a une configuration spécifique que je devrais faire pour mysql ou PHP ????

    il y t'il une autre manière pour récupérer les objets tjs en ayant le message 'enregistrer sous..."

    Merci.

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    autant pour moi tu dois laisser content-type mais enlever content-length

  12. #12
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 281
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 281
    Points : 1 999
    Points
    1 999
    Par défaut
    AMHA les PDF sont mal enregistrés dans la base. Donc, il est évident qu'ils seront mal restitués.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Même avec les fichiers Word et Power Point, c'est le même PB !!!!

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Et même en laissant content-type et enlevant content-length rien ne marche !!!!

  15. #15
    Membre régulier Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Points : 120
    Points
    120
    Par défaut
    Salut =)

    Voici le code que j'utilise et qui fonctionne chez moi :

    Code du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form enctype="multipart/form-data" action="test_file.php" method="POST">
    <input type="file" name="fichier" size=50>
    <input type=submit value="Envoyer">
    Code de l'upload :

    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
    if (!is_uploaded_file($_FILES['fichier']['tmp_name']))
    	{
    		echo 'Problème de transfert, veuillez réessayer.';
    		exit();
    	}
     
    	$img_blob = addslashes(file_get_contents($_FILES['fichier']['tmp_name']));
     
    	$query = 'INSERT INTO fichier VALUES(\'\', \''.$_FILES['fichier']['name'].'\', \''.$_FILES['fichier']['type'].'\' , \''.$img_blob.'\')';
     
    	if (!mysql_query($query, $cnx))
    	{
    		echo mysql_error($cnx);
    		exit();
    	}
    Code du download :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = 'SELECT * FROM fichier WHERE ID=\''.$_GET['id'].'\'';
    $result = mysql_query($query, $cnx);
     
    $buffer = mysql_fetch_array($result);
     
    header("Content-type: ".$buffer['TYPE']);
     
    echo $buffer['FICHIER'];
    et cela marche impeccable pour les fichiers pdf, word, wma et jpg (c'est tout ce que 'ai testé).

    Si tu pouvais nous poster ton code pour l'upload, pour vérifier. Il y a de grandes chances que le problème se situe ici.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    J'ai le message d'erreur suivant lors du upload du fichier :

    Fatal error: Call to undefined function: file_get_contents() in c:\program files\easyphp1-6\www\projet\upload.php on line 18

    Une fonction inconnue . Moi j'utilise EasyPHP 1.6, est ce que je devrais changer de version de PHP ou juste importer une nouvelle "lib" pour avoir cette fonction !!!!

    Merci

  17. #17
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    change de version de php, car file_get_contents est disponible a partir de php 4.3.0 et easyphp 1.6 dispose de la version php 4.2.0

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    SVP Luffy Duck, est ce que vous pouvez m'envoyer le script sql de la table "fichier".

    Merci.

  19. #19
    Membre régulier Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Points : 120
    Points
    120
    Par défaut
    Voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `fichier` (
      `ID` int(11) NOT NULL auto_increment,
      `NOM` varchar(50) NOT NULL default '',
      `TYPE` varchar(30) NOT NULL default '',
      `FICHIER` longblob NOT NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;
    [EDIT] Il faut enlever le AUTO_INCREMENT=26 sinon le champ ID va commencer à 26.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 11
    Points
    11
    Par défaut It's OK
    Merci tt le monde.

    Ca marche enfin

    Merci bcp.


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. affichages des données blob d'une base de données mysql
    Par free_01_binairy dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/08/2014, 10h23
  2. Mapper des objets métier sur une base existante (mais pas un simple mapping)
    Par NaBuCO dans le forum Persistance des données
    Réponses: 2
    Dernier message: 13/04/2012, 15h24
  3. Mapping des objets C++ dans une base de données
    Par ScratchBag dans le forum C++
    Réponses: 18
    Dernier message: 20/09/2008, 12h15
  4. [MySQL] Afficher une image d'un champ blob d'une base MySQL
    Par lolobedo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/11/2005, 10h10
  5. Recuperation des objet ole dans une base SQL
    Par TOPGUN89 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/11/2005, 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