当前位置:  开发笔记 > 后端 > 正文

Rails非图像文件上传到数据库而不使用服务器端临时文件?

如何解决《Rails非图像文件上传到数据库而不使用服务器端临时文件?》经验,为你挑选了1个好方法。

我正在研究向基于Rails的Intranet站点添加功能的可行性,该站点允许用户上传文件.

两个目的:我的用户在地理上分布广泛,并且链接到共享网络存储上的文档并不总是有效(不同的地址,DNS条目以及我无法控制或感兴趣的东西)所以我正在考虑提供面向数据库的替代方案.我们有许多文件可以在客户端解析数据.我宁愿能够把它推到服务器上.

我看过attachment_fu,Paperclip和另一个(忘了名字!),所有这些看起来都非常注重图像,虽然attachment_fu至少可以在没有图像处理库的情况下工作,谢天谢地.

最大的问题是我的服务器不允许我的应用程序在本地编写文件,而这些插件似乎都想创建一个Tempfile.

问题(终于!)

是否有合理的方法上传二进制数据并将其处理到内存中和/或将其存储为BLOB而不保存任何服务器端文件?

或者我应该放弃文件分发的想法,并尽可能地为用户提供第二个最好的复制粘贴文本框选项?

(最近我能在SO上找到这个并没有真正帮助)



1> blindgaenger..:

您可以从params对象中读取数据,并将其直接写入模型.

例如,您可以使用这样的表单.

<% form_for :upload, :url => {:action=>:upload}, :html=>{:multipart=>true} do |f| %>
  <%= f.file_field :file %>
  <%= f.submit 'Upload' %>
<% end %>

然后,您可以轻松获取原始文件名和二进制数据.

class TestController < ApplicationController

  def upload 
    file_param = params[:upload][:file]
    filename = file_param.original_filename
    filedata = file_param.read

    @data = UploadedFile.create(:name => filename, :data => filedata)

    render :text => "created #{@data.id}"
  end

end

当然,您的模型需要具有适当的列.

class CreateUploadedFiles < ActiveRecord::Migration
  def self.up
    create_table :uploaded_files do |t|
      t.string :name
      t.binary :data
      t.timestamps
    end
  end

  def self.down
    drop_table :uploaded_files
  end
end

希望这可以帮助!

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有