在网站public目录下创建upload目录
编写controller如下:文件上传后用它的md5值作为文件名
class TestController < ApplicationController def index end def uploadFile(file) if !file.original_filename.empty? content=file.read @filename=Digest::MD5.hexdigest(content) + "." + file.original_filename.split('.').last.downcase File.open("#{Rails.root}/public/upload/#{@filename}", "wb") do |f| f.write(content) end return @filename end end def upload unless request.get? if filename=uploadFile(params[:file]['file']) @pic = filename end end end end
上传页面index.html.erb
<h1>Upload File</h1> <%= form_tag({:action => 'upload'}, :multipart => true) do %> Upload your file: <%= file_field("file", "file") %> <br/> <%= submit_tag("Upload file") %> <% end %>
显示页面upload.html.erb
<img src="<%= root_url + "upload/" + @pic %>" alt="df" />
如果基于model用form_for方式创建上传呢表单,代码如下
rails generate scaffold item name:string img_url:string #item.rb class Item < ActiveRecord::Base attr_accessible :img_url, :name, :load_photo_file PHOTO_STORE = File.join Rails.root, 'public', 'upload' after_save :save_photo # "f.file_field :load_photo_file" in the view triggers Rails to invoke this method # This method only store the information # The file saving is done in after_save def load_photo_file=(data) # Store the data for later use @photo_data = data.read self.img_url = Digest::MD5.hexdigest(@photo_data) + "." + data.original_filename.split('.').last.downcase end # Called when save is completed def save_photo if @photo_data # Write the data out to a file name = File.join PHOTO_STORE, self.img_url File.open(name, 'wb') do |f| f.write(@photo_data) end @photo_data = nil end end end #_form.html.erb <%= f.file_field :load_photo_file %>
相关推荐
在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...
Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...
在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称的文件时,文件名可能会出现乱码。这个问题主要是由于字符编码不兼容导致的。Rails默认使用UTF-8编码,但文件系统或者某些外部...
在Ruby on Rails框架中,...通过理解以上知识点,你将能够构建一个功能完善的Rails文件上传系统,确保用户能安全、便捷地上传和管理他们的文件。在实际项目中,还需要考虑性能优化、错误处理和用户体验等方面的问题。
在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在应用的升级过程中,处理文件上传的策略可能会有所变化。Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3...
在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...
通过这种方式,我们可以实现无刷新的文件上传,同时保持页面的互动性和用户体验。当然,实际应用中可能还需要考虑错误处理、文件大小限制、文件类型验证等其他细节。在开发过程中,利用`source code`和`tools`来调试...
jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...
用于RailsHTML5文件上传器这个gem使用来上传文件。安装在Gemfile中: gem 'rails-uploader'在航线上: mount Uploader :: Engine => '/uploader' 迁移ActiveRecord: $ bundle exec rails g uploader:install用法...
在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
upload_url: "swfuploadfile.js", // 文件上传的后端处理路径 post_params: { "utf8": "✓", "authenticity_token": "<%= form_authenticity_token %>" }, // 上传请求携带的参数 file_size_limit: "100MB", ...
7. **Rails插件与Gem**:Rails社区提供了丰富的插件和Gem,如Devise用于身份验证,Paperclip或Carrierwave处理文件上传,Resque或Sidekiq实现后台任务队列。掌握如何选择和使用这些工具来扩展应用功能。 8. **Rails...
在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...
在这个场景中,我们关注的是Rails的自动完成、文件上传、分页以及上传进度管理相关的插件。让我们详细了解一下这些关键知识点: 1. **Rails 自动完成**: 自动完成是一种功能,允许用户在输入框中键入时提供预填...
10. **插件和Gem**:Rails的生态系统中,Gem是第三方库的主要形式,它们提供了额外的功能,如Devise用于身份验证,CanCanCan用于授权,Paperclip或Carrierwave处理文件上传等。 11. **部署**:了解如何将Rails应用...