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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值