Impossibile leggere il file con la funzione Send_file in Rails 3
-
28-10-2019 - |
Domanda
Il codice che sto usando:
In Visualizza file:
<%= link_to "Download", download_image_path(image) %>
In controller:
def download
@image = Image.find(params[:id])
send_file "#{RAILS_ROOT}/public" + @image.attachment.url
end
Sto ricevendo un errore:
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: doppio controllato, il file esiste. Lo stesso problema sul server, per tutti i file (immagini, PDF, video) in tutti i rispettivi controller.
Soluzione
Il problema era:
Stavo usando
@image = Image.find(params[:id])
send_file "#{RAILS_ROOT}/public" + @image.attachment.url
Dovrebbe essere
@image = Image.find(params[:id])
send_file @image.attachment.path
PS: assicurati di convalidare quell'immagine/record.
Altri suggerimenti
Basta cambiare il metodo URL per strada:
send_file @image.attachment.path # this is the right way!.
Non so come salvi l'URL dell'allegato dell'immagine, ma in generale, un nome di file dovrebbe apprezzare:
/Users/mohit/projects/my_app/public/system/attachments/4/original/Screen Shot 2011-11-04 at 3.14.03 PM.png
Si noti che non ha "? XXXXX" alla fine.
Puoi controllare il tuo file system, se il nome del file è "Schermata 2011-11-04 alle 3.14.03 PM.PNG" o "SCREEN SHOCE 2011-11-04 alle 3.14.03 PM.PNG? 1320582022".
Per l'URL di file, forse qualcosa di simile: http://example.com/xxx?dddd, quale personaggio "?" Dividi il percorso e i parametri. La stringa "DDDD" è un parametro quando richiedi percorso URL, non fa parte del percorso o del nome file. I parametri supportano solo nell'URL, non nel nome del file locale.
Quindi, penso che tu debba controllare il codice di salvataggio dell'URL di allegata delle immagini, che deve escludere i parametri e solo il nome file. E assicurarsi che il nome sia esattamente uguale al file salvato sul disco.
E puoi provare ad aprire il file attraverso l'IRB e controllare l'output:
>>> 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')
Altri, provano a trovare la posizione di errore in Send_file e controlla il nome del file.
Non riesco ancora a assicurarmi quale sia il problema, solo qualche suggerimento.
Fa questo ?1320582022
appartenere al nome file? Non sono nemmeno sicuro degli spazi bianchi nel nome file, forse devono essere fuggiti.