- 浏览: 215660 次
- 性别:
- 来自: 绍兴
文章分类
最新评论
-
112703013:
你好, 想问个问题 就是我这边上传一个zip文件 大概有100 ...
rails文件上传下载和删除 . -
chen_miao:
qplovechinese 写道 很好!
3q
simple jQuery date-picker plugin 使用 -
qplovechinese:
很好!
simple jQuery date-picker plugin 使用
Model中的部分:
class SystemUploadfile < ActiveRecord::Base
Region = ["北京","西安"]
File_extname = [".rar",".7z",".zip"]
File_target = "public/files"
cattr_accessor :per_page
@@per_page = 10
validates :title,:presence=>true
validates :area,:presence=>true
validates :file_name,:presence=>true
validates :file_url,:presence => true
validates_format_of :file_url,
:with => %r{/.(rar|zip|7z)}i
def set_file_values(file_url,file_name)
self.file_url = file_url
self.file_name = file_name
end
def add_download_count
self.counts += 1
self.save
end
def get_file_path
return SystemUploadfile::File_target+"/"+ self.file_url
end
#删除文件
def delete_file
file_path = File.join(Rails.root,SystemUploadfile::File_target,self.file_url)
if File.exist?(file_path)
File.delete(file_path)
end
end
end
Action中的部分如下:
class SystemUploadfilesController < ApplicationController
def index
@search = SystemUploadfile.search(params[:search]).order('id')
@system_uploadfiles = @search.paginate(:page => params[:page],:per_page => SystemUploadfile.per_page)
end
def new
@system_uploadfile = SystemUploadfile.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @system_uploadfile }
end
end
def create
#如果说什么也没有接收到
if request.get?
@system_uploadfile = SystemUploadfile.new
flash.now[:notice] = "文件上传失败"
render :action => "new"
else
@system_uploadfile = SystemUploadfile.new(params[:system_uploadfile])
#获取上传的文件
uploaded_file = params[:system_uploadfile][:file_url]
if_succ,filepath = upload_file(uploaded_file,SystemUploadfile::File_extname,SystemUploadfile::File_target)
if if_succ
@system_uploadfile.set_file_values(filepath, uploaded_file.original_filename)
if @system_uploadfile.save
redirect_to system_uploadfiles_path,:notice => "文件上传成功"
else
render :action => "new"
end
else
flash.now[:notice] = filepath
render :action => "new"
end
end
end
def download
@system_uploadfile = SystemUploadfile.find_by_id(params[:id])
if @system_uploadfile == nil
redirect_to system_uploadfiles_path, :notice => '没有记录,下载失败!'
else
file_path = @system_uploadfile.get_file_path
if File.exist?(file_path)
#@system_uploadfile.add_download_count
#send_file file_path,:disposition => 'inline'
io = File.open(file_path)
io.binmode
send_data(io.read,:filename => @system_uploadfile.file_name,:disposition => 'attachment')
io.close
else
redirect_to system_uploadfiles_path, :notice => '文件不存在,下载失败!'
end
end
end
def destroy
@system_uploadfile = SystemUploadfile.find_by_id(params[:id])
if @system_uploadfile == nil
flash.now[:notice] = '该记录已被删除'
redirect_to system_uploadfiles_path
else
@system_uploadfile.delete_file
@system_uploadfile.destroy
respond_to do |format|
format.html { redirect_to(system_uploadfiles_path) }
format.xml { head :ok }
end
end
end
end
Form:html部分
<% form_for( @system_uploadfile,:html=>{:multipart => true}) do |f| -%>
<%= f.label :title, "标题:" %>
<br />
<%= f.text_field :title%>
<em style="color:red;"><%= f.error_message_on :title %></em>
<br />
<%= f.label "区域" %>
<%= f.select :area,options_for_select(SystemUploadfile::Region) %>
<br></br>
选择上传文件:<br/>
<%= file_field(:system_uploadfile, :file_url)%>
<em style="color:red;"><%= f.error_message_on :file_url %></em>
<br/>
<%= f.submit "提交", :disable_with => '提交中...'%>
<% end -%>
程序中用到的一个方法:
def upload_file(file,extname,target_dir)
if file.nil? || file.original_filename.empty?
return false,"空文件或者文件名错误"
else
timenow = Time.now
filename = file.original_filename #file的名字
fileloadname = timenow.strftime("%d%H%M%S")+filename #保存在文件夹下面的上传文件的名称
if extname.include?(File.extname(filename).downcase)
#创建目录
#首先获得当前项目所在的目录+文件夹所在的目录
path = Rails.root.join(target_dir,timenow.year.to_s,timenow.month.to_s)
#生成目录
FileUtils.makedirs(path)
File.open(File.join(path,fileloadname),"wb") do |f|
f.write(file.read)
return true,File.join(timenow.year.to_s,timenow.month.to_s,fileloadname)
end
else
return false,"必须是#{extname}类型的文件"
end
end
end
from:http://blog.csdn.net/xuchao111/article/details/6333605
发表评论
-
require,include,load,extend的用途和区别
2013-03-01 22:47 980这四个方法还是很好玩很有用,也是比较容易混的。 ... -
ruby 标准类型总结
2013-02-01 16:45 1241一、数字 Ruby支持整数 ... -
RMagick 简介
2013-01-18 20:38 1414RMagick 是一个将 Ruby 语言绑定到 ImageM ... -
ARP欺骗功能
2013-01-12 22:47 1157一、设置前准备 当使用了防止ARP欺骗功能(IP和 ... -
淘宝开源编辑器KISSY Editor
2013-01-04 16:46 2379KISSY Editor 是开源项目 KISSY ... -
Rails创建定时任务
2012-12-10 10:21 1849Task & Rexcel 最终生成的报 ... -
Ruby on Rails页面缓存 实践
2012-12-05 11:02 1075三种方式 Page Caching, Action ... -
rails缓存学习
2012-11-27 16:38 1892FORM:http://kenbeit.com/tag/ ... -
Ruby on Rails 简单页面缓存
2012-11-16 17:28 1233三种方式 Page Caching, Action Ca ... -
Ruby写入Excel文件 插件方法
2012-11-01 16:21 1529spreadsheet插件(主要是excel生成写入数 ... -
RUBY操作EXCEL文件
2012-10-31 17:05 1421使用ruby来操作excel文 ... -
Ruby on Rails的session和session存储方案
2012-10-18 17:42 1288session:页面间的信息保存手段。使用:赋值 ses ... -
Ruby程序打包成可执行文件的工具 - RubyScript2Exe
2012-09-19 21:28 2279RubyScript2Exe能够将你的Ruby应用程序转成一个 ... -
rails中实现kindeditor中的图片上传
2012-09-14 16:10 1656FROM: http://blog.sina.co ... -
js 彷excel 键盘上下左右移动
2012-09-03 19:11 3042思路假设初始坐标为(0,0)首先要算出表格的最大最小坐标 即( ... -
ruby Hash 总结
2012-08-31 18:51 63081. 如何创建Hash? x = Hash.newx = { ... -
ruby inject,循环计算优化
2012-08-27 16:51 1330From:http://blog.jayfields.com/ ... -
jquery 图表插件highcharts & highstock
2012-08-23 14:43 11203Highcharts是纯JavaScript编写的图表库,提 ... -
rails or ruby 中 fields_for 提交方式
2012-08-20 20:10 1636Project这个Model的new表单,我们需要在创建Pro ... -
Rails中导出excel的快速简便的方法
2012-07-31 15:51 1096controller def to_e ...
相关推荐
在Ruby on Rails框架中,...通过理解以上知识点,你将能够构建一个功能完善的Rails文件上传系统,确保用户能安全、便捷地上传和管理他们的文件。在实际项目中,还需要考虑性能优化、错误处理和用户体验等方面的问题。
6. **测试**:确保为文件上传功能编写测试,覆盖上传、删除、替换和访问已上传文件的各种场景。升级后,这些测试能帮助识别并修复可能出现的问题。 7. **性能优化**:考虑文件上传的性能,如分块上传、预处理(如...
此外,Rails提供了丰富的插件和gem(Ruby gem),例如Devise用于身份验证,CanCanCan处理授权,Paperclip或Carrierwave用于文件上传等,这些都能极大地增强应用的功能。 在开发过程中,Rails还提供了TDD(测试驱动...
8. **Gem生态系统**:Ruby的Gem包管理系统使得开发者可以方便地利用社区开发的库,如Devise(身份验证),CanCanCan(权限控制),Carrierwave(文件上传)等。 9. **Rails发电机**:Rails提供了一系列发电机,如`...
- **file_column (文件上传)**:此插件简化了文件上传过程,使得在Rails应用中处理文件上传变得更为直观和高效。它支持多种文件类型,并允许你自定义存储选项,如上传位置、文件名生成策略等。 - **acts_as_state_...
10. **插件和Gem**:Rails的生态系统中,Gem是第三方库的主要形式,它们提供了额外的功能,如Devise用于身份验证,CanCanCan用于授权,Paperclip或Carrierwave处理文件上传等。 11. **部署**:了解如何将Rails应用...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...
6. **插件和gem**:Rails社区有大量的插件和gem可供扩展功能,如Devise用于用户认证,Cancancan用于授权,或者Paperclip和Carrierwave处理文件上传。 7. **Ajax和JavaScript**:Rails 2.2.2支持集成Prototype ...
10. **社区和生态系统**:Rails拥有庞大的开发者社区,产生了许多优秀的第三方Gem库,如Devise(身份验证),Paperclip(文件上传),Pundit(权限控制)等,丰富了Rails的功能。 Rails 1.0.0的发布标志着Web开发...
这个例子展示了如何在Rails控制器中处理文件上传和删除。当然,实际应用中可能需要根据具体需求进行更复杂的定制。 总的来说,Ruby-Attache是一个强大的工具,简化了文件上传的处理,同时提供了丰富的功能和高度的...
10. **Gem包管理**:Ruby的Gem是类似Python的pip或Node.js的npm的包管理工具,Rails应用广泛依赖于Gems,如Devise用于身份验证,Pundit或CanCanCan用于权限管理,Carrierwave或Paperclip处理文件上传等。 11. **...
这些插件提供了处理文件上传、存储、版本控制和删除的功能。它们可以将文件存储在本地磁盘、云服务如Amazon S3或Google Cloud Storage上,同时提供方便的模型关联和数据库记录。 3. **分页**: 分页是Web应用中...
10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...
Rails社区活跃,拥有大量的gem(相当于其他语言的库或插件),这些gem扩展了Rails的功能,例如Devise用于身份验证,CanCanCan用于授权管理,Pundit用于细粒度的权限控制,Paperclip或Carrierwave处理文件上传,...
10. **Rails社区和生态**:Rails有庞大的开发者社区,提供了众多高质量的开源gem,如Devise(用户认证)、Paperclip或Carrierwave(文件上传)、Pundit或CanCanCan(授权)、Resque或Sidekiq(后台任务处理)等。...
- **上传文件**:介绍如何处理文件上传操作。 - **定制表单生成器**:解释如何创建自定义的表单生成器。 - **理解参数命名约定**:解释表单提交时参数的命名规则。 - **处理外部资源的表单**:指导如何处理来自外部...
在实际开发中,还可以利用各种 Gems(Ruby 社区的库)扩展功能,如 Devise 用于用户认证,Bootstrap 提供响应式布局,以及 Paperclip 或 Carrierwave 处理文件上传等。 通过这个入门例子,你将了解 Rails 的基本...
第九章讨论了 **文件上传** 的实现方式,这是 Web 应用中常见的功能之一。 - **文件上传**: - 实现用户可以上传图片、文档等文件的功能。 - 需要考虑安全性问题,防止恶意文件上传。 - 可以使用第三方服务,如 ...
8. **插件系统**:Administrate有一个活跃的社区,提供了许多插件,可以扩展其功能,例如日期范围筛选器、多文件上传等。 9. **版本管理**:“e980d40”这样的版本号可能意味着在项目中锁定特定版本,以确保一致性...