如何查看在我的数据库中编码的pdf文件(作为base64)?

时间:2013-08-08 21:14:01

标签: ruby-on-rails postgresql iframe heroku

我目前在heroku上有一个网站,我正在使用postgreSQL。当我将pdf文件上传到数据库时,我将它们编码为base64并将它们保存为文本。我可以点击一个链接解码文件并下载它没有问题;但是,我有一个页面,我有一个iframe与pdf文件在其中。如何将新解码的文件提供给iframe?即使没有iframe,我怎么才能解码文件并将其作为页面?

我在想我可以创建一个pdf控制器,解码文件并显示打开文件,但我甚至无法让它工作。

感谢您的帮助!

编辑:这是我到目前为止所拥有的。

def create
  @course = Course.find(params[:note][:id])
  params[:note][:content].tempfile = Base64.encode64(open(params[:note][:content].tempfile).to_a.join)
  params[:note][:filename] = params[:note][:content].original_filename
  params[:note][:contenttype] = params[:note][:content].content_type
  @note = @course.notes.build(:content => params[:note][:content].tempfile, :filename => params[:note][:filename],        
  :contenttype => params[:note][:contenttype])
  if @note.save
      flash[:success] = "File Uploaded!"
      redirect_to root_path
end

这会将文件保存为base64而不会出现问题。我不太确定下一部分。

def show
  @note = Note.find(params[:id])
  @notecon = @note.content
  decoded_data=Base64.decode64(@notecon)
  file_name = "test"
  @temp_file = Tempfile.new("filename-#{Time.now}")
  File.open(@temp_file, 'wb') {|f| f.write(decoded_data)}
end

现在,在视图中,我不知道要放什么文件路径。

<iframe src="http://docs.google.com/gview?url=http://localhost:3000/app/views/notes/test&embedded=true" 
style="width:718px; height:700px;" frameborder="0"></iframe>

我甚至无法弄清楚如何发布保存在我的驱动器上的pdf文件。 再次感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用

send_data 
动作控制器中的

方法将文件发送到浏览器。您需要设置内容类型,浏览器应如何显示内容等。

send_data(@pdf, :type => 'application/pdf', :filename => "myfile.pdf", :disposition => "inline"

:deposition =&gt;'inline'指示浏览器在浏览器中显示它。

您可以在此处找到将图像上传到数据库的类似示例

http://over9000.org/rails/saving-ruby-on-rails-attachments-as-blobs

https://gist.github.com/macek/610596

Rails: Storing binary files in database

考虑将pdf存储到Amazon S3存储桶或其他云存储。 PaperClip宝石可以为您做好准备。 https://github.com/thoughtbot/paperclip。 Paperclip也可以保存到数据库中。

如果您仍计划使用数据库存储,请注意其优点 Rails: Storing binary files in database