2009-11-08 4 views
4

J'utilise les balises suivantes dans mon html.erb à la fois écran et télécharger un fichier jpg qui est pas dans le dossier public/images:S'il vous plaît aidez-moi à envoyer un fichier jpg en utilisant send_data

<%= image_tag retrieve_photo_path(@photo) %> 
<%= link_to "Download Photo", download_photo_path(@photo) %> 

ma le code du contrôleur ressemble à:

def retrieve 
    @photo = Photo.find(params[:id]) 
    send_data File.read(@photo.abs_filepath), :type = "image/jpeg", :disposition => "inline" 
end 

def download 
    @photo = Photo.find(params[:id]) 
    send_file @photo.abs_filepath, :type = "image/jpeg", :filename => @photo.filename 
end 

Le lien de téléchargement fonctionne parfaitement, mais le tag d'image affiche un x rouge (image brisée). Qu'est-ce que je rate? J'utilise InstantRails sur WinXP, mis à jour vers Rails 2.3.4 et Ruby 1.8.6.

+0

Vérifiez vos journaux de serveur ou de sortie pour la demande à l'action "retreive". Vous y trouverez probablement des messages d'erreur qui pourraient vous aider à comprendre. – nicholaides

+0

Si je tape l'URL "www.mytestapp.com/photos/3/retrieve" directement dans mon navigateur (IE) pour simuler la demande img, je reçois l'image rouge x cassé - et mon apache access.log a ce qui suit entrée: "GET/photos/3/retrieve HTTP/1.1" 304 0 Quelqu'un peut-il aider avec ce que ce code d'état 304 signifie? – user206481

+0

Il semble que cela ait quelque chose à voir avec la mise en cache d'Apache, mais je ne suis pas du tout familier avec cela - s'il vous plaît, aidez! – user206481

Répondre

9

Vous ne lisez pas les données de fichier correctement, vous devez d'abord ouvrir le fichier.

Modifier votre action retrieve comme suit:

def retrieve 
    @photo = Photo.find(params[:id]) 
    File.open(@photo.abs_filepath, 'rb') do |f| 
    send_data f.read, :type => "image/jpeg", :disposition => "inline" 
    end 
end 
+0

alléluia! c'était ça! Intéressant que je n'ai pas eu un message d'erreur. – user206481

+0

merci beaucoup! – user206481

Questions connexes