论坛首页 编程语言技术论坛

上传图片的问题(不用插件)----图片浏览系统之一

浏览 3339 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-16  
这几天公司让做一个在线的照片展示系统用来测试两个星期的RoR自学成果,在做到上传照片时,因为是按照<<Web 敏捷开发>>来开发的,书上是将图片保存在数据库中,也就是说在数据库表建立一个名为data,类型为binary的字段,可以成功保存.
可是将图片文件保存到数据库中占有太多的物理空间,并且速度慢,所以改为在数据库中存放图片的url,将图片存放到public/images/目录下,在这里没有使用其他的插件,
在getpicture.rhtml中写下如下的代码
<html>
    <head>
        <center>
            <h1>Select Your Picture and Upload</h1>
        </center>
    </head>
    <body>
        <center>
            <%= error_messages_for("picture") %>
            <% form_for(:picture,
            :url => { :action => 'savepicture'},
            :html => { :multipart => true }) do |form| %>
            Comment: <%= form.text_field("comment") %>
            <br/>
            Upload Your picture: <%= form.file_field("uploaded_picture") %>
            <br/>
            <%= submit_tag("Upload file") %>
            <%= link_to "Back",{:action => "adminlist"} %>
            <% end %>
        </center>
    </body>
</html>


上传的图片会被保存在uploaded_picture属性中,但数据库理没有这么一个字段,所以在模型对象里做如下设置


def uploaded_picture=(picture_field)
    self.name = base_part_of(picture_field.original_filename)
    self.content_type = picture_field.content_type.chomp
    #self.data = picture_field.read
    self.image_url = "/images/" + self.name
   
    File.open("#{RAILS_ROOT}/public/images/#{picture_field.original_filename}", "wb+") do |f|
      f.write(picture_field.read)
    end
  end

  def base_part_of(file_name)
    File.basename(file_name).gsub(/[^\w._-]/, '')
  end

利用File.open一行将图片文件复制到public/images/目录下,并保存了该图片的url


在页面显示的时候直接用
<img src="<%= @picture.image_url%>" width="400" height="400"/>
就可以显示出图片了
   发表时间:2008-08-04  
这几天我们也在做图片上传

我个人的理解是这样的
uploaded_picture是model的一个自定义属性
uploaded_picture=(picture_field)
是当发生符值时要触发的一个方法(当然他也有自定义的属性的含义)
0 请登录后投票
   发表时间:2008-08-05  
弱弱的问一句:
上传图片如果是中文,路径存不进去,怎么办?
0 请登录后投票
   发表时间:2008-08-06  
还真没考虑过这个问题,现在不做ruby了,也没有时间研究,真不好意思
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics