Question

Le code J'utilise:

Dans le fichier de vue:

 <%= link_to "Download", download_image_path(image) %>

Dans le contrôleur:

def download
  @image = Image.find(params[:id])
  send_file "#{RAILS_ROOT}/public"  + @image.attachment.url
end

Je reçois une erreur:

Cannot read file /Users/mohit/projects/my_app/public/system/attachments/4/original/Screen Shot 2011-11-04 at 3.14.03 PM.png?1320582022

PS: revérifié, le fichier existe. Même problème sur le serveur, pour tous les fichiers (images, vidéos, pdfs) dans tous les contrôleurs respectifs.

Était-ce utile?

La solution

L'enjeu était:

J'utilisais

 @image = Image.find(params[:id])
 send_file "#{RAILS_ROOT}/public"  + @image.attachment.url

Il doit être

 @image = Image.find(params[:id])
 send_file  @image.attachment.path

PS:. Assurez-vous de vérifier que l'image / enregistrement existe

Autres conseils

Il suffit de changer la méthode d'URL par chemin:

send_file  @image.attachment.path # this is the right way!.

Je ne sais pas comment vous enregistrez l'URL de l'image d'attache, mais en général, un nom de fichier voudrais:

/Users/mohit/projects/my_app/public/system/attachments/4/original/Screen Shot 2011-11-04 at 3.14.03 PM.png

Avis il n'a pas a "? Xxxxx" à la fin.

Vous pouvez vérifier votre système de fichiers, si le nom du fichier est « Screen Shot 2011-11-04 à 14.03.03 PM.png » ou « Screen Shot 2011-11-04 à 14.03.03 PM.png? 1320582022 » .

Pour url fichier, il peut-être quelque chose comme: http://example.com/xxx?dddd , quel caractère « ? » diviser le chemin d'accès et des paramètres. La chaîne « dddd » est un paramètre lorsque le chemin d'URL de demande, ce n'est pas une partie de chemin ou nom de fichier. Les paramètres prennent en charge que dans l'URL, pas au nom de fichier local.

Alors, je pense que vous devez vérifier le code de sauver url image en pièce jointe, qui ont besoin d'exclure les paramètres et que le nom de fichier. Et assurez-vous que le nom est exactement le même que le fichier enregistré sur le disque.

Et vous pouvez essayer d'ouvrir le fichier directement et bien irb vérifier la sortie:

>>> irb
irb> f = open('/Users/mohit/projects/my_app/public/system/attachments/4/original/Screen Shot 2011-11-04 at 3.14.03 PM.png?1320582022')

D'autres, essayez de trouver l'emplacement d'erreur dans send_file et vérifiez le nom du fichier.

Je ne peux toujours pas faire en sorte que la question est vraiment, juste une suggestion.

Est-ce ?1320582022 appartiennent à son nom? Je ne sais pas sur les espaces blancs dans le nom de fichier soit, ils ont besoin peut-être être échappé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top