Errores #3481
abierta[ plugin webdav ] Error al intentar subir un documento (put) via webdav
0%
Descripción
Al intentar subir un documento via webdav salta este error
En el metodo put:
Started PUT "/webdav/PRUEBA/IMG_20160418_235553.jpg" for ::1 at 2018-11-06 12:38:56 +0100 Usuario Load (0.3ms) SELECT `usuario`.* FROM `usuario` WHERE `usuario`.`nombre` = 'admin' AND `usuario`.`contrasena` = '867c8340877a693ebfd2861b3b75fa5d4efb56ca' AND `usuario`.`bloqueado` = 0 LIMIT 1 Espacio Load (0.3ms) SELECT `espacio`.* FROM `espacio` WHERE `espacio`.`nombre` = 'PRUEBA' AND `espacio`.`espacio_padre_id` IS NULL AND `espacio`.`definicion_espacio_proyecto` IS NULL ORDER BY `espacio`.`id` ASC LIMIT 1
Salta este error:
[paperclip] Trying to link /var/folders/8n/q5dxhgyx6hz41hj1w50p51cr0000gn/T/puma20181106-834-1tfkgj4 to /var/folders/8n/q5dxhgyx6hz41hj1w50p51cr0000gn/T/5d15efba57a76821980345be6576934e20181106-834-1shtsg0 -------------> Content-type: image/jpeg NoMethodError (undefined method `content_type=' for Paperclip::FileAdapter: IMG_20160418_235553.jpg:Paperclip::FileAdapter Did you mean? content_type): /usr/share/gong/plugins/webdav/app/controllers/webdav/dav.rb:384:in `extract_tempfile' /usr/share/gong/plugins/webdav/app/controllers/webdav/dav.rb:148:in `put'
Lo he probado con un cliente de webdav en macos y en linux
Actualizado por Santiago Ramos hace alrededor de 6 años
(probando con el gestor de archivos de gnome)
Tiene un comportamiento aleatorio: unas veces funciona y otra no. Hasta donde he descubierto funciona cuando metemos el fichero en una carpeta ya abierta en el cliente webdav.
Si intentamos meter el fichero en un directorio que aún no ha abierto el cliente (previamente, puesto que parece que cachea), devuelve error.
Quizás tenga que ver con algo en la respuesta del método GET que haga que el PUT no se construya igual?.
Actualizado por Jaime Ortiz hace alrededor de 6 años
Hola!
Pues parece que tras los diferentes cambios que has hecho funciona:
https://git.semillasl.com/gong_plugins/webdav/commits/master
Muchas gracias Santi!
Actualizado por Jaime Ortiz hace alrededor de 6 años
(Recopilo la situación tras varias pruebas. Muchas gracias a Santi por la ayuda)
Tenemos actualmente dos problemas:
A) Existe un error con las rutas construidas para el navegador. Tras este cambio:
#response.body << "<a href='" + child.public_path + "'>" + child.file_name + "</a>" response.body << "<a href='./" + child.file_name + "'>" + child.file_name + "</a>"
Este cambio de poner las rutas relativas era necesario para limpiar las rutas de caracteres "/" que en la OEI son muy comunes, pero las rutas ahora salen mal por que son absolutas, y no relativas a la carpeta que nos encontramos y a la ruta inicial. Ejemplo:
http://localhost:3000/Proyectos
En vez de
http://localhost:3000/webdav/Proyectos
NOTA: Esto es un error subsanable.... bueno, eso me parece a mi.
B) El problema al que de momento no le encuentro mas que una solucion rara es el relativo a los mime tipos de los archivos.
Al subir archivos via el cliente de webdav no permite guardar dando un error de "spoofing":
[paperclip] Content Type Spoof: Filename semilla_datos.txt (inode/x-empty from Headers, ["text/plain"] from Extension), content type discovered from file comm and: inode/x-empty. See documentation to allow this combination.
Este error se produce cuando paperclip lee en el archivo via el commando "file" del sistema. Y siempre encuentra que el mime tipe es "vacio", es decir: "inode/x-empty"
Este tema se puede quitar utilizando la siguiente configuración en config/initializers/paperclip.rb:
1 #Allow as an extension for files with the MIME type "text/plain". 2 Paperclip::Attachment.default_options[:validate_media_type] = false
Pero el problema es que esta configuración impide posteriormente bajarse los ficheros del servidor correctamente dando problemas de "corrupcion" (no se está sirviendo adecuadamente el tipo de archivo, por que no se ha guardado adecuadamente).
La unica solución por el momento para que funcione adecuadamente ha sido la siguiente:
config/initializers/paperclip.rb:
1 Paperclip.options[:content_type_mappings] = { 2 :jpg => ["inode/x-empty"], 3 :png => ["inode/x-empty"], ....etc ... 4 }
Es decir, decirle en el arranque que para todas las extensiones el mime type es "vacio". Pero claro, esto de momento es un poco raro.
NOTA-FINAL: Ninguna de las configuraciones que pongo a continuacion (en el modelo) ha funciona para resolver este problema:
- :validate_media_type => false,
- validates_attachment_content_type :adjunto, content_type: /.+/
- do_not_validate_attachment_file_type :adjunto
app/models/documento.rb
62 has_attached_file :adjunto, 63 :validate_media_type => false, 64 :path => ENV["RAILS_VAR"] + "documento.:id", 65 :url => "descargar/:id" 66 validates_attachment_content_type :adjunto, content_type: /.+/ 67 # Evitamos que se valide el content type o la extension 68 do_not_validate_attachment_file_type :adjunto