2013-09-04 8 views
1

Я обрабатываю pdf, загружаемый пользователем, извлекая текст из него и сохраняя вывод в текстовом файле для последующей обработки.Carrierwave: файл Temp процесса, а затем загружать через туман

Локально я храню PDF в своей общей папке, но когда я работаю на Heroku, мне нужно использовать S3.

Я думал, что путь PDF была проблема, поэтому я включил

если Rails.env.test? || Rails.env.cucumber?

Но до сих пор я получаю

ArgumentError (вход должен быть в IO-подобный объект или имя файла):

Есть ли способ временного хранения PDF в моем корне/tmp на Heroku, получить текст из него, а затем, после этого, загрузить документ на S3?

def convert_pdf 
    if Rails.env.test? || Rails.env.cucumber? 
     pdf_dest = File.join(Rails.root, "public", @application.document_url) 
    else 
     pdf_dest = @application.document_url 
    end 
    txt_file_dest = Rails.root + 'tmp/pdf-parser/text' 

    document_file_name = /\/uploads\/application\/document\/\d{1,}\/(?<file_name>.*).pdf/.match(@application.document_url)[:file_name] 

    PDF::Reader.open(pdf_dest) do |reader| 
     File.open(File.join(txt_file_dest, document_file_name + '.txt'), 'w+') do |f| 
      reader.pages.each do |page| 
       f.puts page.text 
      end 
     end 
    end 
end 

ответ

2

Вы хотите настроить пользовательский процессор в своем загрузчике. И кроме того, поскольку выходной файл (.txt) не будет иметь такое же расширение, как входной файл (.pdf), вы захотите изменить имя файла. Следующее относится в вашем Uploader:

process :convert_to_text 

def convert_to_text 
    temp_dir = Rails.root.join('tmp', 'pdf-parser', 'text') 
    temp_path = temp_dir.join(filename) 

    FileUtils.mkdir_p(temp_dir) 

    PDF::Reader.open(current_path) do |pdf| 
    File.open(temp_path, 'w') do |f| 
     pdf.pages.each do |page| 
     f.puts page.text 
     end 
    end 
    end 

    File.unlink(current_path) 
    FileUtils.cp(temp_path, current_path) 
end 

def filename 
    super + '.txt' if original_filename.present? 
end 

Я не запускать этот код, так что, вероятно, некоторые ошибки, но это должно дать вам идею, по крайней мере.

 Смежные вопросы

  • Нет связанных вопросов^_^