1.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
2.controller层添加代码
class SystemUploadfilesFilesController < 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
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
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
end
3.页面上写的代码
<% form_for( @system_uploadfile,:url=>{:action=>"create"},: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 -%>
分享到:
相关推荐
jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...
jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传 从October年8 月开始,已经不推荐使用 另外,对于其他的, 付费和免费的上传工具,JackUp已经被否决了。 JackUp简单AJAX文件在 Rails 中上传。安装修改你的...
《AngularJS大文件上传插件ng-file-upload深度解析》 在Web开发中,文件上传功能是不可或缺的一部分,尤其是在处理大文件时,用户交互体验和上传效率尤为重要。AngularJS作为一款强大的前端框架,提供了丰富的功能...
在Rails应用中,这种类型的应用通常会涉及用户上传图片、查看图片、评论图片等功能,需要处理图像存储(例如使用S3服务)、数据库设计(如用户、照片、评论表的结构)以及前后端交互逻辑。此外,由于是与OpsWorks...
4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...
6. **格式和大小限制**:开发者可以设置文件类型和大小的限制,防止用户上传不合适的文件,如大容量文件或者非文本文件等。 7. **自定义样式**:插件的界面样式可以通过CSS进行调整,以适应各种网站的设计风格。 8...
10. **社区工具和插件**:介绍一些常用的Rails gem,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传等。 附带的`rr2-code.zip`文件很可能包含了书中各章节示例代码,这将有助于读者更好地理解和实践书...
在“Youtube-Rails-main”这个项目文件中,你将找到整个应用的源代码结构,包括Rails的目录结构、Gemfile(依赖管理)、配置文件、模型、控制器、视图、样式表和JavaScript文件等。通过深入研究和理解这些文件,你...
10. **Rails社区和生态**:Rails有庞大的开发者社区,提供了众多高质量的开源gem,如Devise(用户认证)、Paperclip或Carrierwave(文件上传)、Pundit或CanCanCan(授权)、Resque或Sidekiq(后台任务处理)等。...
Plupload是一款强大的JavaScript上传组件,版本为2.3.6,专为处理多文件上传、图片及视频分片上传等功能而设计。这个压缩包“plupload-2.3.6.zip”包含了所有必要的资源和文档,帮助开发者在项目中集成这一功能。 ...
"redmine-4.0.4.zip" 是这个软件的一个特定版本,包含了所有必要的文件,用于安装和运行Redmine 4.0.4。在了解这个压缩包之前,我们先来看看Redmine的核心特性以及Ruby on Rails框架。 1. Redmine特性: - 问题...
PNG是一种常见的图像文件格式,支持透明度,适合用作网站或应用的图标。 接下来,`appConfig.xlt`可能是应用程序配置文件。在不同的上下文中,配置文件可以有不同的格式和用途。在这个案例中,`xlt`并不是一个常见...
在用户选择图片文件后,插件可以在上传之前显示图片预览,让用户在上传前就能看到文件的效果,避免了因图片格式问题或不符合要求而反复上传的情况。这对于处理图片类的上传应用尤其有用,如在线相册、社交媒体等。 ...
1. **多文件选择与上传**:用户可以一次选择多个文件进行上传,极大地提高了操作效率。 2. **进度条显示**:在文件上传过程中,组件会实时展示上传进度,提升用户体验。 3. **预览功能**:用户可以在上传前预览...
"学习系统eledge-3.1.0.zip"是一个压缩包文件,其中包含了用于构建和运行eledge学习系统的资源和应用程序。eledge是一款专为在线教育设计的平台,旨在提供高效、互动的学习体验。版本号3.1.0表明这是该软件的一个...
6. **文件管理**:由于是.zip文件,使用者需要了解如何解压和访问文件系统,这可能涉及到命令行工具(如Windows的cmd或Linux的终端)或图形界面工具。 7. **版本控制**:文件名“rag-master”暗示这可能是一个Git...
- 上传文件:利用集成的阿里云OSS SDK,可以编写控制器方法,接收前端提交的文件,然后调用 SDK 的 upload 方法上传到 OSS。 - 下载文件:生成预签名URL,提供给前端用于下载。预签名URL具有有效期限制,增加了...
在本项目中,"Laravel开发-backblaze .zip" 提供了关于使用 Laravel 框架结合 Backblaze B2 Cloud Storage ...通过解压并研究这个.zip文件,你可以学习如何在Laravel项目中集成云存储服务,提升应用的扩展性和可靠性。
它可以替代支付服务如 Divshot ,动态 web 服务器 Rails,或者手动上传您的网站到S3 或 FTP服务器。Features版本脚本和样式文件,以确保您的网页部署时或部署后不使用不一致的文件集。支持返回到以前的版本不依赖于...