On 2012-03-05 11:18:34 +0100, Guillaume Betous wrote:
> def download
> head(:not_found) and return if (track =
> Track.find_by_id(params[:id])).nil?
> head(:forbidden) and return unless track.downloadable?(current_user)
>
> path = track.mp3.path(params[:style])
> head(:bad_request) and return unless File.exist?(path) &&
> params[:format].to_s == File.extname(path).gsub(/^\.+/, '')
>
> send_file_options = { :type => File.mime_type?(path) }
>
> case SEND_FILE_METHOD
> when :apache then send_file_options[:x_sendfile] = true
> when :nginx then head(:x_accel_redirect => path.gsub(Rails.root,
> ''), :content_type => send_file_options[:type]) and return
> end
>
> send_file(path, send_file_options)
> end
Ça en fait du code dans le contrôleur :-)
Donc suivant la valeur de SEND_FILE_METHOD, tu sers les fichiers via
ton front HTTP… Ou directement rails.
Si tu passes par rails, le code me semble ok et faire ce que tu
souhaites.
Si tu passes par ton front-end HTTP, cela ne concerne plus rails et
nous sommes donc hors-sujet ici, mais vraisemblablement ta
configuration n'est pas en adéquation avec les types mime que tu veux
servir :
http://wiki.nginx.org/HttpCoreModule#types
http://httpd.apache.org/docs/2.4/mod/mod_mime.html
Personnellement je creuserais du côté front-end HTTP.
> J'ai également essayé une modification : utiliser "attachment.content_type"
> au lieu de "File.mime_type" pour préciser le type. Ca ne marche pas mieux,
> or dans ma base, content_type a une valeur correcte : video/ogg. J'ai même
> essayé en forçant cette valeur avec "video/ogg" et "audio/ogg", sans
> meilleur résultat...
Je vais me répéter mais il suffit de vérifier la réponse HTTP.
> Après, en écrivant ceci, je me demande si je ne suis pas victime des
> différents cache, c'est à dire qu'une modification du controleur pour gérer
> ce type MIME ne serait pas forcément être vue par mon browser qui a caché
> ces informations ?
Là encore, seule une vérification de la réponse HTTP pourra te
donner la réponse, tout le reste ne sera effectivement qu'hypothèses
ou suppositions. En regardant la réponse HTTP un coup d'œil te suffira
pour vérifier alors autant faire simple :-)
Sinon, mauvais navigateur : changer navigateur. Pour développer sans
te poser ce genre de question il faut que tu saches ce qui caché, par
qui, comment, et les circonstances. ÀMHA en développement utiliser du
cache c'est se compliquer les choses.
Et des fois que tu n'arrives pas à utiliser/configurer ton
navigateur comme il faut il reste curl et netcat ou similaire.
ps : merci de répondre « à l'endroit » et de ne citer que les parties
pertinentes :-)
--
Thibault Jouan
http://a13.fr/
+33 6 28 25 39 00 (UTC+1)
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse
[email protected]