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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top