我目前在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文件。 再次感谢!
答案 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