`

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 中上传。安装修改你的...

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    静态网站部署工具Stout.zip

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

    前端项目-blueimp-file-upload.zip

    前端项目-blueimp-file-upload,具有多个文件选择、拖放支持、进度条、验证和预览图像、用于jquery的...与支持标准HTML表单文件上传的任何服务器端平台(谷歌App Engine、PHP、Python、露比Rails、Java等)一起工作。

    java开源包1

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包11

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包2

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包3

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包6

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包5

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包10

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包4

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包8

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包7

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包9

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包101

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    Java资源包01

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

Global site tag (gtag.js) - Google Analytics