http://rorwiki.hellopen.net/index.php?title=HowtosFiles
圖片上傳是web應用程序中常用到的,ROR中是如何實現的。
1.創建一個表
create table pictures(
?id int not null auto_increment,
?comment varchar(100),
?name varchar(200),
?content_type varchar(100),
?data blob,
?primary key(id)
);
2.建立一個controller
class UploadController < ApplicationController
?
?def get
??@picture = Picture
?end
?
end
3.頁面get.rhtml
<%=error_messages_for("picture")%>
<%=form_tag({:action=>"save",:multipart=>true})%>
?comment:<%=text_field("picture","comment")%><br>
?Upload your picture:<%=file_field("picture","picture")%><br>
?<%=submit_tag("Upload file")%>
<%=end_form_tag%>
在這邊要注意的是要設置:multipart=>true.
4.建立實體Picture.rb
class Picture < ActiveRecord::Base
?validates_format_of(:content_type,:with=>/^image/,
??????:message=>"---you can only upload pictures")
??????
?def picture=(picture_field)
??self.name = base_part_of(picture_field.original_filename)
??self.content_type = picture_file.content_type.chomp
??self.data = picture_field.read
?end
?
?def base_part_of(file_name)
??name = File.basename(file_name)
??name.gsub(/[^\w._-]/,'')
?end
end
5.在controller增加一個save方法
def save
?@picture = Picture.new(params[:picture])
?if @picture.save
??redirect_to(:action=>"show",:id=>@picture)
?else
??render(:action=>:get)
?end
end
這樣就把圖片存入到數據庫中了。那如何在頁面上現實圖片呢?
6.在controllers中增加一個picture的方法。
def picture
?@picture = Picture.find(params[:id])
?send_data(@picture.data,
???? :filename=>@picture.name,
???? :type=>@picture.content_type,
???? :disposition>"inline")
end
轉到顯示頁面的action就很簡單了。
def show
?@picture = Picture.find(params[:id])
end
7.顯示圖片頁面show.rhtml
<h3><%=@picture.comment%></h3>
<image src="<%=url_for(:action=>"picture",:id=>@picture.id)%>"/>
?