Pregunta

Para el registro, estoy trabajando en código heredado y estoy tratando de conectar una nueva función sin romper todo. En este momento tengo un montón de archivos en mi servidor como tales:

 myapp/public/temp/myfile.doc

La cuestión es que quiero crear un objeto Docfile a partir de estos archivos en una acción de controlador.

Aquí está la clase Docfile recortada:

class DocFile < ActiveRecord::Base
  has_attached_file :docs,
    :path => "#{Constants::DOCFILES_PATH}:basename.:extension",
    :url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end

Paperclip tiene buena documentación si carga desde un formulario, pero no en mi situación.

Entonces, ¿cómo puedo " simular " ¿El hecho de que estoy subiendo un archivo?

Hasta ahora he intentado esto:

temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file

Pero no está funcionando.

Cualquier puntero sería apreciado!

Editar:

Hice esto:

temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url,  "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)

Todavía no funciona

¿Fue útil?

Solución

Tuve que hacer esto:

temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path,  "r")

@docfile = DocFile.new :docs => temp_file

Aparentemente, si no abrí el archivo como " leer " no funcionaria Tiene muy poco sentido para mí, ¡pero funciona ahora!

Otros consejos

No soy una autoridad en Rails pero,

@docfile = DocFile.new :docs => temp_file

no debería ser

@docfile = DocFile.new :docs => temp_file_url  

Debes pasar Paperclip a File objeto:

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)

Creo que tendrá que resolver esto con una migración y para sus archivos existentes deberá rellenar las columnas que Paperclip agrega a su modelo ( xxx_file_name , xxx_content_type, xxx_file_size ). No mencionó si Constantes :: DOCFILES_PATH se asigna a su directorio de documentos heredados, pero aun así creo que tendrá que enlazar estos archivos con la estructura de directorios que el clip de papel espera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top