Como usar o clipe com um arquivo já no meu servidor?
-
05-07-2019 - |
Pergunta
Para o registro, eu estou trabalhando em código legado e eu estou tentando ligar um novo recurso sem quebrar tudo. Agora eu tenho um monte de arquivos no meu servidor como tal:
myapp/public/temp/myfile.doc
A coisa é que eu quero criar um objeto Docfile a partir desses arquivos em uma ação do controlador.
Aqui está o aparadas para baixo classe Docfile:
class DocFile < ActiveRecord::Base
has_attached_file :docs,
:path => "#{Constants::DOCFILES_PATH}:basename.:extension",
:url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end
Paperclip tem alguma documentação bom se você faz o upload de uma forma, mas não na minha situação.
Assim como pode I "simular" o fato de que eu estou carregando um arquivo?
Até agora eu tentei isso:
temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file
Mas ele não está funcionando.
Os ponteiros seria apreciada!
Editar:
Eu fiz isso:
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)
Ele ainda não está funcionando
Solução
Eu tive que fazer isso:
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 se eu não abrir o arquivo como "ler" não iria funcionar. Faz muito pouco sentido para mim, mas ele funciona agora!
Outras dicas
Eu não sou uma autoridade on Rails, mas,
@docfile = DocFile.new :docs => temp_file
não deveria ser
@docfile = DocFile.new :docs => temp_file_url
Você deve passar Paperclip
um objeto File
:
temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)
Eu acho que você vai precisar para resolver este problema com uma migração e para os seus arquivos existentes que você vai precisar para preencher as colunas que clipe acrescenta ao seu modelo (xxx_file_name
, xxx_content_type, xxx_file_size
). Você não mencionou se Constants::DOCFILES_PATH
é mapeado para o diretório do documento legado, mas mesmo assim eu acho que você vai ter que link simbólico para esses arquivos para a estrutura de diretórios que espera clipe de papel.