Rails文件上传-无插件方式

没有特殊申明,我的代码都是在mysql5.0 + netbeans-for-ruby下测试通过的

1。Model

我创建了一张表:mysql> describe photos;
+------------+--------------+------+-----+---------------------+---------------
+
| Field | Type | Null | Key | Default | Extra
|
+------------+--------------+------+-----+---------------------+---------------
+
| id | int(11) | NO | PRI | NULL | auto_increment
|
| album_id | int(11) | YES | MUL | 1 |
|
| url | varchar(255) | NO | | NULL |
|
| name | varchar(255) | YES | | NULL |
|
| created_at | datetime | YES | | 0000-00-00 00:00:00 |
|
+------------+--------------+------+-----+---------------------+---------------

generate 一个model:

class Photo < ActiveRecord::Base
end
不需要任何代码,当然也可以添加检查代码:
validates_format_of :url,
:with=>/^.*(.jpg|.JPG|.gif|.GIF)$/,
:message => "你只能上传JPG或则GIF的图片文件"

2。controller

#以下是关于文件上传的代码
before_filter :configure_charsets

def configure_charsets
@headers["Content-Type"]="text/html;charset=utf-8"
end

def upload

end

def upload_file(file)
if !file.original_filename.empty?
@filename=get_file_name(file.original_filename)
File.open("#{RAILS_ROOT}/public/uploads/#{@filename}", "wb") do |f|
f.write(file.read)
end
return @filename
end
end

def get_file_name(filename)
if !filename.nil?
Time.now.strftime("%Y%m%d%H%M%S") + '_' + filename
end
end

def save_file
unless request.get?
if filename=upload_file(params[:file]['file'])
return filename
end
end
end
#==============================
# 修改create方法:

def create
@photo = Photo.new(params[:photo])
@filename=save_file #调用save_file方法,返回文件名
@photo.url="
/uploads/#{@filename}" #保存文件路径字段
@photo.name=(@filename)[15,@filename.length] #保存文件名字段
if @photo.save
flash[:notice] = 'Photo was successfully created.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end

3。View

修改:_form.rhtml

Upload your file: <%= file_field("file", "file") %>

修改:new.rhtml

<h1>New photo</h1>
<%= form_tag({:action => 'create'}, :multipart => true) %>
<%= render :partial => 'form' %>
<%= submit_tag("Upload file") %>
<%= end_form_tag %>

修改:show.rhtml
<%= image_tag url_for_file_column("entry", "image") %>
不行的话,用<img src='<%=@photo.url%>'.....

这里,没有用到任何有关文件上传的插件。所以,用起来比较单纯,上传的文件都放在路径/public/uploads/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值