如何在数据库中保存图像路径并在ROR中将该图像附加到浏览器上

时间:2014-12-24 06:21:30

标签: ruby ruby-on-rails-3 ruby-on-rails-4

有人可以告诉我在数据库中保存图像的想法,然后在浏览器上显示该图像。我已经有一些代码和名称存储在数据库中,但路径不能。请帮我重新编写代码并在浏览器上成功显示图像。

我的代码片段:

视图/图像/ index.html.erb

<h1>IMAGE UPLOAD</h1>
<%= form_for @user,:url => {:action => 'save'} do |f| %>
  <%= f.text_field :name,placeholder:"Enter your name" %>
  Upload your file:<%= f.file_field("uploaded_file") %>
  <%= f.submit "Save"%>
<% end %>

视图/图像/ show.html.erb

<h3><%= @user.name %></h3>
<img src="<%= url_for(:action => 'file', :id => @user.id) %>"/>

控制器/ images_controller.rb

class ImagesController < ApplicationController
  def index
    @user=User.new
  end
  def save
    @user=User.new(user_params)
    if @user.save
      redirect_to(action: 'show', id: @user.id)
    else
      render(action: 'index')
    end
  end
  def show
    @user = User.find(params[:id])
  end
  def file
    @user = User.find(params[:id])
    send_data(@user.data,
      filename: @user.name,
      disposition: "inline")
  end
private
  def user_params
    params.require(:user).permit(:name, :data)
  end
end

模型/ user.rb

class User < ActiveRecord::Base
  def uploaded_file=(file_field)
    self.name = base_part_of(file_field.original_filename)
    self.data = file_field.read
  end
  def base_part_of(file_name)
    File.basename(file_name).gsub(/[^\w._-]/, '')
  end
end

的routes.rb

Rails.application.routes.draw do
  root 'images#index'
  post 'images/save' => 'images#save'
  get 'images/show' => 'images#show'
  get 'images/file' => 'images#file'
end

迁移/ 20141224051228_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.binary :data

      t.timestamps
    end
  end
end

请帮我找到合适的输出。谢谢。

1 个答案:

答案 0 :(得分:0)

你几乎在那里,但你必须做出一些改变。我还建议您使用paperclip - (可在此处paperclip找到)进行文件上传,因为它提供了验证和文件格式的便捷方法,还可以裁剪图像而无需编写处理图像的代码。

话虽如此,要使现有代码起作用,您必须进行一些更改。

将模型更改为这样,还会引入另一个名为image_url

的字段
class User < ActiveRecord::Base

  def uploaded_file=(file_field)
    self.name = base_part_of(file_field.original_filename)
    self.data = file_field.read
    self.image_url = Rails.root + "/public/uploads/" + self.name
  end

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

现在在您的观看中,您可以这样做

<img src="<%= @user.image_url %>"/> and it should work just fine. 

这些只是建议,代码未经过测试。希望你明白这个想法