rails文件上传
除了通过paperclip等插件来上传文件之外,也可以不用插件,用ruby的File模块中的方法来实现文件上传。
一、控制器
在控制器中加入以下两个方法,其中getfilename用来修改所上传的文件名称,
在我所上传的文件中存在空格,会出现,系统找不到文件的错误,所以将文件中的空格去掉,
def uploadfile(file)
if !file.original_filename.empty?
@filename=getfilename(file.original_filename)
#设置目录路径,如果目录不存在,生成新目录
FileUtils.mkdir("#{RAILS_ROOT}/db/upload") unless File.exist?("#{RAILS_ROOT}/db/upload")
#写入文件
File.open("#{RAILS_ROOT}/db/upload/#{@filename}", "wb") do |f|
f.write(file.read)
end
return @filename
end
end
#文件名
def getfilename(filename)
if !filename.nil?
filename.split(' ').to_s
end
end
二、视图
form_tag的模板:
<% form_tag :multipart => true do %>
<%= file_field_tag "photo" %>
<% end %>
form_for的模板:
<% form_for :user, @product, :html => { :multipart => true } do |f| %>
<%= f.file_field :photo%>
<% end %>
注意:两种表单multipart属性的写法,通过加这个属性使表单支持上传文件,不加这个属性或写的不对,会报下面的错 误.
NoMethodError (undefined method `original_filename' for " 20100824 1427.sql":String):
app/controllers/admin/dbmanager_controller.rb:56:in `uploadfile'
app/controllers/admin/dbmanager_controller.rb:32:in `restore'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'
c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'
读取图片时:
<%= image_tag @product.photo.url %>
分享到:
相关推荐
Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...
- **file_column (文件上传)**:此插件简化了文件上传过程,使得在Rails应用中处理文件上传变得更为直观和高效。它支持多种文件类型,并允许你自定义存储选项,如上传位置、文件名生成策略等。 - **acts_as_state_...
将上传文件路径添加到您的.gitignore文件中 /public/rails_admin_image_manager 运行迁移 $ rails db:migrate SCOPE=rails_admin_image_manager 安装图像管理器CKEditor插件 mkdir -p app/assets/javascripts/...
在这个场景中,我们关注的是Rails的自动完成、文件上传、分页以及上传进度管理相关的插件。让我们详细了解一下这些关键知识点: 1. **Rails 自动完成**: 自动完成是一种功能,允许用户在输入框中键入时提供预填...
9. **安全性**:考虑到用户可能会上传敏感图像,应用需要处理好文件上传的安全问题,如防止跨站脚本攻击(XSS)和文件包含漏洞。 10. **部署和持续集成**:最后,开发完成后,应用需要部署到服务器,可能涉及到...
2. **图片和文件上传**:`rails_kindeditor` 支持图片和文件的上传功能。你需要配置一个专门用于存储这些上传文件的目录,并在服务器端处理文件上传的逻辑,确保安全性。 3. **安全考虑**:由于富文本编辑器允许...
在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...
jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...
例如,`devise`插件提供了用户身份验证和注册功能,`bootstrap-sass`插件帮助引入Bootstrap CSS框架,`paperclip`或`carrierwave`用于文件上传,`activeadmin`则提供了一个后台管理界面。 在博文“Rails插件收集”...
2. **数据库迁移**:在完成文件上传后,登录到Redmine的服务器,运行数据库迁移命令,这会将插件的数据库结构更新到当前版本。通常,命令可能是`rake redmine:plugins:migrate RAILS_ENV=production`,但请根据你的...
在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...
jQuery File Upload是一款功能强大的文件上传插件,专为前端开发者设计,用于在Web应用程序中实现高效、用户友好的多文件上传功能。这个插件的版本是v10.32.0,它提供了丰富的特性,使得文件上传变得更加简单且可控...
7. **Rails插件与Gem**:Rails社区提供了丰富的插件和Gem,如Devise用于身份验证,Paperclip或Carrierwave处理文件上传,Resque或Sidekiq实现后台任务队列。掌握如何选择和使用这些工具来扩展应用功能。 8. **Rails...
在实现Rails应用中的多图上传功能时,通常需要借助于特定的插件或Gem来简化开发流程并增强功能。以下两个工具是必不可少的: 1. **Paperclip(Gem)** - **用途**:用于后台文件处理,是一款非常强大的工具,支持...
**jQuery-File-Upload** 是一个广泛使用的前端文件上传插件,它提供了丰富的功能和优秀的用户体验。这个插件是基于JavaScript库jQuery构建的,旨在简化文件上传操作,尤其是在需要批量上传、进度显示以及跨域上传的...
具有多文件上传、拖拽、进度条和图像预览功能的文件上传插件,支持跨域、分块、暂停恢复和客户端图像缩放。可与任何服务端平台(如PHP、Python、Ruby on Rails、Java、Node.js、Go等)一起使用,支持标准的HTML表单...
10. **插件和Gem**:Rails的生态系统中,Gem是第三方库的主要形式,它们提供了额外的功能,如Devise用于身份验证,CanCanCan用于授权,Paperclip或Carrierwave处理文件上传等。 11. **部署**:了解如何将Rails应用...
此外,Rails提供了丰富的插件和gem(Ruby gem),例如Devise用于身份验证,CanCanCan处理授权,Paperclip或Carrierwave用于文件上传等,这些都能极大地增强应用的功能。 在开发过程中,Rails还提供了TDD(测试驱动...
4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...