Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Servlet gestionnaire de téléchargement

3 réponses
Avatar
Symon
Bonjour,

Je travaille sur un site (l=E9gal !) de t=E9l=E9chargement de contenus
musicaux. Nous avons mis en place un syst=E8me qui comptabilise le
nombre de t=E9l=E9chargement des fichiers au niveau de la page de
t=E9l=E9chargement en elle m=EAme.

Or, avec le d=E9veloppement du podcasting, il se trouve qu'un nombre de
plus en plus important d'utilisateurs seront en mesure de t=E9l=E9charger
ces sons sans m=EAme passer par notre site, via un flux RSS.

Nous avons d'ores et d=E9ja mis en place un syst=E8me qui comptabilise
les lectures du flux RSS. Mais nous souhaiterions avoir des
statistiques d=E9taill=E9es sur les t=E9l=E9chargement directs en http.

Une seule solution a mes yeux : cr=E9er un servlet qui prendra en
entr=E9e l'id d'un son et renverra le contenu du fichier MP3 associ=E9
sur la r=E9ponse http. Ce servlet pourra alors renseigner une base de
donn=E9e sur les t=E9l=E9chargements directs.

Quelques questions : cot=E9 serveur, suffit il de brancher un
FileOutputStream sur la r=E9ponse de ma servlet ? En effectuant les
modifications n=E9cessaires dans la configuration de mod_jk, le servlet
pourra r=E9pondre sur toutes les requ=EAtes en *.mp3, mais ce type de
manoeuvre est-il VRAIMENT totalement transparent cot=E9 client
(notamment avec des clients qui peuvent streamer du mp3 en http, type
winamp) ? Ou est ce qu'on risque d'avoir des probl=E8mes =E0 ce niveau ?

Merci pour vos retour d'exp=E9riences sur ce sujet.

Cordialement,

Symon

3 réponses

Avatar
Manu
Bonjour,

Je travaille sur un site (légal !) de téléchargement de contenus
musicaux. Nous avons mis en place un système qui comptabilise le
nombre de téléchargement des fichiers au niveau de la page de
téléchargement en elle même.

Or, avec le développement du podcasting, il se trouve qu'un nombre de
plus en plus important d'utilisateurs seront en mesure de télécharger
ces sons sans même passer par notre site, via un flux RSS.

Nous avons d'ores et déja mis en place un système qui comptabilise
les lectures du flux RSS. Mais nous souhaiterions avoir des
statistiques détaillées sur les téléchargement directs en http.

Une seule solution a mes yeux : créer un servlet qui prendra en
entrée l'id d'un son et renverra le contenu du fichier MP3 associé
sur la réponse http. Ce servlet pourra alors renseigner une base de
donnée sur les téléchargements directs.

Quelques questions : coté serveur, suffit il de brancher un
FileOutputStream sur la réponse de ma servlet ? En effectuant les
modifications nécessaires dans la configuration de mod_jk, le servlet
pourra répondre sur toutes les requêtes en *.mp3, mais ce type de
manoeuvre est-il VRAIMENT totalement transparent coté client
(notamment avec des clients qui peuvent streamer du mp3 en http, type
winamp) ? Ou est ce qu'on risque d'avoir des problèmes à ce niveau ?

Merci pour vos retour d'expériences sur ce sujet.

Cordialement,

Symon



ben en fait rien a voir mais... le plus simple est alors l'utilisation
de php, dans ton serveur tu ajoutes l'extension mp3 comme prog php du
coup ton fichier mamusique.mp3 est un fichier php qui lui va chercher la
"musique.mp3" (la vraie) dans un dossier proteger par un .htaccess tout
en envoyant le bon header mp3 :"audio/mpeg" mpga mp2 mp3
ainsi tu peux tres facilement memoriser d'ou proviens l'ip de
l'internaute, son os, son navigateur, etc etc etc, et tout cela tres
transparent... bref ma solution n'est pas en java pour ce cas precis
(choix personnel, rapidite/mise en place/cout de developpement)
mais bon il existe plein d'autre solutions...

manu

Avatar
Symon
Bonjour,

Merci pour l'info, c'est a peu prêt le fonctionnement que j'ai mis en
place en java. Pour ceux que ça pourrait intéresser, voici la
méthode que j'ai utilisé.

Il suffit de rediriger les requêtes d'apache sur tomcat, avec, par
exemple, dans le httpd.conf :

JkMount /sons/* ajp13

(tous nos sons sont dans ce répertoire)

Puis, il faut mapper un servlet la dessus, dans le web.xml :

<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/sons/*</url-pattern>
</servlet-mapping>

Et enfin, dans le servlet DownloadServlet, quelque chose de ce gout la
:

String path =
(String)getServletContext().getAttribute("LOCAL_SOUND_PATH");
File file = new File(path + request.getPathInfo());
InputStream in = new FileInputStream(file);

OutputStream out = response.getOutputStream();
response.setContentType("audio/mpeg");

int data = 0;
while ((data = in.read()) != -1) {
out.write(data);
}

On a pas constaté d'effets de bords, notamment par rapport à notre
inquiétude quant à une utilisation streamée de gros fichiers MP3.
Symon
Avatar
Hello,
On a pas constaté d'effets de bords, notamment par rapport à notre
inquiétude quant à une utilisation streamée de gros fichiers MP3.


Je ne pense pas qu'il y en aura. J'ai fait pour ma boite un servlet qui
fait pratiquement la même chose mais pour tout fichier de type mime. De
plus, l'avantage de ce systèle est que tu peux coller ta musique, et
plus généralement tes fichiers, dans une BD (en blob). De ce fait, en
synchronisant tes DB, tu peux garder plusieurs serveurs synchrones et à
jour au 4 coins du globe (sinon faut du NAS et/ou du VPN et NFS et/ou du
DAV)

Pour en revenir au php, je me méfierais grandement de ce genre de manip s
car une injection ou un détournement du code est trés vite arrivé à
moins de chrooter son serveur.

--
@+ Yann