Proyecto

General

Perfil

Errores #3481

[ plugin webdav ] Error al intentar subir un documento (put) via webdav

Añadido por Jaime Ortiz hace más de 5 años. Actualizado hace más de 5 años.

Estado:
Nueva
Prioridad:
Normal
Asignado a:
-
Categoría:
-
Versión prevista:
-
Fecha de inicio:
2018-11-06
Fecha fin:
% Realizado:

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

Histórico

#1 Actualizado por Santiago Ramos hace más de 5 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?.

#2 Actualizado por Jaime Ortiz hace más de 5 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!

#3 Actualizado por Jaime Ortiz hace más de 5 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

Exportar a: Atom PDF

Financiado por:

Desarrollado por:
Software libre forjado en: