Храните созданный системой файл PDF на S3

Решено, см. редактирование внизу.


В моем приложении rails 3.1 я создаю PDF-файл следующим образом:

def show
  @contributor = Contributor.find(params[:id])

   respond_to do |format|
   format.pdf { 
    html = render_to_string(:action => "show.html.erb") 
    kit = PDFKit.new(html) 
    kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/unique/print.css" 
   thepdf = send_data kit.to_pdf, :filename => "blah.pdf", :type => 'application/pdf' 
redirect_to :action => save_to_s3      
}
end

Затем я пытаюсь сохранить сгенерированный PDF-файл на S3, загрузив его с помощью Paperclip:

def save_to_s3
     html = render_to_string(:action => "show.html.erb") 
      kit = PDFKit.new(html) 
      kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/unique/print.css" 
      roy = Royarchive.new(:client_id => @contributor.client_id) 
      f = File.open("blah.pdf", 'w+')
      f.write kit.to_pdf
      roy.pdf = f
      roy.save!
end 

Но это дает мне "\x9C" from ASCII-8BIT to UTF-8

Как я могу использовать Paperclip для загрузки этого сгенерированного PDF-файла на S3? Я использую Heroku, поэтому не могу сохранить временный файл на сервере, а затем загрузить его.

////решено

О, мой плохой, вы можете хранить файлы на время сеанса в корневом каталоге.

Итак, это работает:

   def show
  @contributors = Contributor.where(:client_id => current_user.client_id).paginate(:page => params[:page])
  @contributor = Contributor.where(:client_id => current_user.client_id).find(params[:id])


   respond_to do |format|
   format.html 
    format.pdf { 
    html = render_to_string(:action => "show.html.erb") 
    kit = PDFKit.new(html) 
    kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/unique/print.css" 
    send_data kit.to_pdf, :filename => "name.pdf", :type => 'application/pdf' 
    @thepdf = kit.to_file("#{Rails.root}/tmp/name.pdf")

roy = Royarchive.new(:client_id => @contributor.client_id) 
roy.pdf = @thepdf
roy.save!     
  }   

end
end

person snowangel    schedule 01.09.2011    source источник
comment
Я буду - вам нужно больше представителей, чем мне, чтобы даже ответить, не говоря уже о том, чтобы принять, ваш собственный вопрос в течение 8 часов после его написания.   -  person snowangel    schedule 01.09.2011


Ответы (1)


О, мой плохой, вы можете хранить файлы на время сеанса в корневом каталоге.

Итак, это работает:

def save_to_s3
  html = render_to_string(:action => "show.html.erb") 
   kit = PDFKit.new(html) 
   kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/unique/print.css" 
  thepdf = kit.to_file("#{Rails.root}/tmp/name.pdf")

     roy = Royarchive.new(:client_id => @contributor.client_id) 
     roy.pdf = thepdf
     roy.save!
     redirect_to :action => index
end 
person snowangel    schedule 01.09.2011