`

rails上传zip格式文件

 
阅读更多
 

 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文件上传集成.zip

    jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成 Rails 文件上传jQuery-File-Plugin 是一个文件上传插件,由的Tschan 。 jQuery文件上传功能多文件选择。drag&拖放支持。进度栏和jQuery预览图像。 支持...

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传.zip

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传 从October年8 月开始,已经不推荐使用 另外,对于其他的, 付费和免费的上传工具,JackUp已经被否决了。 JackUp简单AJAX文件在 Rails 中上传。安装修改你的...

    ng-file-upload-master.zip

    《AngularJS大文件上传插件ng-file-upload深度解析》 在Web开发中,文件上传功能是不可或缺的一部分,尤其是在处理大文件时,用户交互体验和上传效率尤为重要。AngularJS作为一款强大的前端框架,提供了丰富的功能...

    Rails应用程序样本AWSOpsWorksRailsDemoApp.zip

    在Rails应用中,这种类型的应用通常会涉及用户上传图片、查看图片、评论图片等功能,需要处理图像存储(例如使用S3服务)、数据库设计(如用户、照片、评论表的结构)以及前后端交互逻辑。此外,由于是与OpsWorks...

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...

    jQuery File Upload文件上传插件 v10.32.0.zip

    6. **格式和大小限制**:开发者可以设置文件类型和大小的限制,防止用户上传不合适的文件,如大容量文件或者非文本文件等。 7. **自定义样式**:插件的界面样式可以通过CSS进行调整,以适应各种网站的设计风格。 8...

    Rails.Recipes.Rails.3rd和源码

    10. **社区工具和插件**:介绍一些常用的Rails gem,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传等。 附带的`rr2-code.zip`文件很可能包含了书中各章节示例代码,这将有助于读者更好地理解和实践书...

    Youtube等视频共享应用程序,采用Ruby on Rails、Hotwire、Tailwind CSS构建.zip

    在“Youtube-Rails-main”这个项目文件中,你将找到整个应用的源代码结构,包括Rails的目录结构、Gemfile(依赖管理)、配置文件、模型、控制器、视图、样式表和JavaScript文件等。通过深入研究和理解这些文件,你...

    应用rails进行敏捷web开发

    10. **Rails社区和生态**:Rails有庞大的开发者社区,提供了众多高质量的开源gem,如Devise(用户认证)、Paperclip或Carrierwave(文件上传)、Pundit或CanCanCan(授权)、Resque或Sidekiq(后台任务处理)等。...

    plupload-2.3.6.zip

    Plupload是一款强大的JavaScript上传组件,版本为2.3.6,专为处理多文件上传、图片及视频分片上传等功能而设计。这个压缩包“plupload-2.3.6.zip”包含了所有必要的资源和文档,帮助开发者在项目中集成这一功能。 ...

    redmine-4.0.4.zip

    "redmine-4.0.4.zip" 是这个软件的一个特定版本,包含了所有必要的文件,用于安装和运行Redmine 4.0.4。在了解这个压缩包之前,我们先来看看Redmine的核心特性以及Ruby on Rails框架。 1. Redmine特性: - 问题...

    看照片生成链接.zip

    PNG是一种常见的图像文件格式,支持透明度,适合用作网站或应用的图标。 接下来,`appConfig.xlt`可能是应用程序配置文件。在不同的上下文中,配置文件可以有不同的格式和用途。在这个案例中,`xlt`并不是一个常见...

    jQuery-File-Upload-9.9.2.zip

    在用户选择图片文件后,插件可以在上传之前显示图片预览,让用户在上传前就能看到文件的效果,避免了因图片格式问题或不符合要求而反复上传的情况。这对于处理图片类的上传应用尤其有用,如在线相册、社交媒体等。 ...

    jQuery File Upload 基于Jquery的图片上传组件.zip

    1. **多文件选择与上传**:用户可以一次选择多个文件进行上传,极大地提高了操作效率。 2. **进度条显示**:在文件上传过程中,组件会实时展示上传进度,提升用户体验。 3. **预览功能**:用户可以在上传前预览...

    学习系统eledge-3.1.0.zip

    "学习系统eledge-3.1.0.zip"是一个压缩包文件,其中包含了用于构建和运行eledge学习系统的资源和应用程序。eledge是一款专为在线教育设计的平台,旨在提供高效、互动的学习体验。版本号3.1.0表明这是该软件的一个...

    Ruby自动分级器_Ruby_HTML_下载.zip

    6. **文件管理**:由于是.zip文件,使用者需要了解如何解压和访问文件系统,这可能涉及到命令行工具(如Windows的cmd或Linux的终端)或图形界面工具。 7. **版本控制**:文件名“rag-master”暗示这可能是一个Git...

    Laravel开发-aliyun-oss .zip

    - 上传文件:利用集成的阿里云OSS SDK,可以编写控制器方法,接收前端提交的文件,然后调用 SDK 的 upload 方法上传到 OSS。 - 下载文件:生成预签名URL,提供给前端用于下载。预签名URL具有有效期限制,增加了...

    Laravel开发-backblaze .zip

    在本项目中,"Laravel开发-backblaze .zip" 提供了关于使用 Laravel 框架结合 Backblaze B2 Cloud Storage ...通过解压并研究这个.zip文件,你可以学习如何在Laravel项目中集成云存储服务,提升应用的扩展性和可靠性。

    静态网站部署工具Stout.zip

    它可以替代支付服务如 Divshot ,动态 web 服务器 Rails,或者手动上传您的网站到S3 或 FTP服务器。Features版本脚本和样式文件,以确保您的网页部署时或部署后不使用不一致的文件集。支持返回到以前的版本不依赖于...

Global site tag (gtag.js) - Google Analytics