我正在研究向基于Rails的Intranet站点添加功能的可行性,该站点允许用户上传文件.
两个目的:我的用户在地理上分布广泛,并且链接到共享网络存储上的文档并不总是有效(不同的地址,DNS条目以及我无法控制或感兴趣的东西)所以我正在考虑提供面向数据库的替代方案.我们有许多文件可以在客户端解析数据.我宁愿能够把它推到服务器上.
我看过attachment_fu,Paperclip和另一个(忘了名字!),所有这些看起来都非常注重图像,虽然attachment_fu至少可以在没有图像处理库的情况下工作,谢天谢地.
最大的问题是我的服务器不允许我的应用程序在本地编写文件,而这些插件似乎都想创建一个Tempfile.
问题(终于!)
是否有合理的方法上传二进制数据并将其处理到内存中和/或将其存储为BLOB而不保存任何服务器端文件?
或者我应该放弃文件分发的想法,并尽可能地为用户提供第二个最好的复制粘贴文本框选项?
(最近我能在SO上找到这个并没有真正帮助)
您可以从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
希望这可以帮助!