2010-07-12 7 views
0

Je construis un site qui stocke quelques fichiers audio mp3 dans mySQL. Pour le moment seulement 5, l'efficacité n'est pas un problème du tout. En ce moment, j'essaie toujours de faire une solution multi-navigateur/plate-forme qui ne nécessitera pas d'autres formats de fichiers.Récupérer et lire des fichiers mp3 à partir de mySQL en utilisant Javascript/PHP

J'ai un script PHP qui récupère les données binaires mp3 et envoie l'en-tête approprié au navigateur. Les fichiers peuvent ensuite être récupérés en spécifiant le src de l'élément audio (que ce soit audio ou embed, ou autre) comme suit: src = "retrieve_audio.php? UniqueAudioID = [fichier d'identification de variable PHP]". Le fichier retrieve_audio php prend l'ID de base de données fourni dans l'URL et récupère les données, l'envoie avec l'en-tête à la page demandeuse ...

Cela fonctionne bien pour les balises audio et embed dans Safari. Pour une raison quelconque, Safari l'appelle un flux - probablement parce que la taille du fichier n'est pas fournie - et les contrôles ne permettent pas de récurer le fichier indépendamment de l'étiquette utilisé (audio ou embed). IE semble comprendre la longueur du fichier récupéré bien qu'il ne soit pas explicitement donné. Le vrai problème est Firefox, Opera et Chrome. Ceux-ci ne semblent pas comprendre cela du tout. FIrefox montre un contrôle pendant quelques secondes, puis affiche un X comme dans - Je ne peux pas jouer ceci ... Je suis conscient des problèmes avec le tag dans Firefox. Il fait la même chose avec embed. Opera et Chrome n'affiche rien ou un carré blanc vide.

Des suggestions?

Je n'aurais jamais pensé devoir lutter avec Firefox sur quelque chose qui fonctionne dans IE!

Toute contribution sera grandement appréciée.

M

+0

Je résolu la question Firefox et Opera, pas trop préoccupé par Chrome pour le moment. Mais - Je voudrais savoir comment SAfari reconnaît que le contenu n'est pas un flux, mais une quantité limitée de données. Je fournis l'en-tête content-length maintenant - de quoi Safari a-t-il besoin pour reconnaître la longueur du fichier audio? Merci M –

Répondre

0

essayer de télécharger les fichiers MP3 sur votre serveur Web, puis stocker le lien vers les fichiers MP3 dans votre base de données Mysql puis juste dire php pour saisir le lien et l'écho à une balise embed html avec le lien comme src.

+0

Préférez conserver les données et les informations associées dans une base de données. De cette façon, je peux garder le type mime, la taille du fichier, le titre et toute autre information avec le fichier dans son enregistrement. Rien à désynchroniser et cela permet à mon utilisateur de télécharger de nouveaux fichiers dans le site en conservant toutes les informations (recueillies par le code de téléchargement, à l'exception du titre, qui est fourni par l'utilisateur) avec les données du fichier. –

0

J'ai déjà eu des problèmes avec Firefox, il s'attend à avoir un en-tête HTTP Content-length avec à peu près tout.

Vous pouvez essayer de trouver la longueur du contenu du fichier MP3 en utilisant un SQL SELECT data, LENGTH(data) FROM ... puis définissez l'en-tête HTTP à l'aide header("Content-length: $lengthField");

+0

Merci - vous avez donné une idée qui fonctionnait - n'a pas fait exactement ce que vous avez dit - fournissait un en-tête content-length, mais l'information contenue dans le fichier dans la base de données mySQL et un champ appelé file_size.Étant donné que la taille du contenu de la base de données ne changera pas jusqu'au téléchargement suivant qui a du sens. Cela s'est occupé de FIrefox et Opera - Chrome ne sait toujours pas quoi faire avec l'audio - Je ne peux ignorer cela - à moins que quelqu'un ait une idée de comment réparer ... M –

Questions connexes