2010-04-13 7 views
10

que empecé a usar el módulo de carga nginx (que crea archivos de carga como/tmp/000121545) pero necesito clip para utilizar nombre de archivo original al guardar los archivos (como /public/avatars/LuckyLuke.jpg)¿De dónde saca paperclip el nombre del archivo original?

previamente en los rieles parámetros estaban pasando solo

"avatar"=>#<File:/tmp/RackMultipart20100413-6151-t3ecq0-0> 

nombre del archivo original, así que me pregunto de dónde viene en el clip? Intenté buscar en el código de complemento, pero actualmente es un poco complejo para mí.

Respuesta

19

El navegador envía un encabezado http con el nombre del archivo. ("Content-Disposition: filename = original_file.jpg")

Rails lo hace disponible como un método de instancia del objeto de archivo temp: params[:avatar].original_filename y paperclip lo usa.

En detalle, Rack analiza la forma multiparte en Rack :: Utils :: Multipart :: UploadedFile y pone un hash en los parámetros que incluyen :tempfile y :filename. A continuación, aparece ActionDispatch :: Http :: Upload y reemplaza ese hash por el objeto File (valor de: tempfile), ampliándolo con el módulo ActionDispatch :: Http :: UploadedFile, que agrega una variable de instancia para original_path y el método original_filename.

+0

Yap, es Content-Disposition: form-data; name = "archivos"; filename = "file1.txt" De: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 –

+0

hm, creo que es así, pero no puedo encontrar ningún rastro de "Content-Disposition" en el código del clip mientras se desgrana. –

+1

Ah, lo siento. Veo lo que estás preguntando ahora. Editaré la respuesta para incluir cómo los rieles obtienen el nombre del archivo. – mckeed

Cuestiones relacionadas