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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top