`
clark1231
  • 浏览: 253511 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

rails 上载xls文件

阅读更多

 以下两种form都可以上载文件(http://guides.rails.info/form_helpers.html#what-gets-uploaded)

 第一种

<%= form_tag({:action => :upload}, :multipart => true) do %>
  <%= file_field_tag 'picture' %>
<% end %>

第二种

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

 

controller中

 

def upload
  uploaded_io = params[:person][:picture]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
    file.write(uploaded_io.read)
  end
end

 

 

实例:

涉及到xls读入并创建记录

view中

 

<%= form_for(@part, :url => {:action => "upload"}) do |f| %>
  <%= f.file_field :xls_file%>
  <%= f.submit %>
<% end %

 controller中

 

  def upload
    begin
      if params[:part][:xls_file]
        uploaded_io = params[:part][:xls_file]
        workbook = Spreadsheet.open(uploaded_io.tempfile)
        sheet = workbook.worksheet 0
        Part.transaction do
          sheet.each do |row|
            if row[0].is_a?(Float)
              part = Part.create!(:name=>row[1], :project_id => params[:part][:project_id], :size=>row[3], :material=>row[4], :quantity=>row[5].to_i, :weight=>row[6], :description=>row[8])
            end
          end
          redirect_to ......
        end
      else
        raise Errno::error #在没有选择导入文件直接点击上载时抛出一个异常
      end
    rescue => err
      logger.error(err)
      redirect_to ......
    end
  end

对上述controller中的处理增加出错提示、方便使用者定位自己的导入文件的错误

  def upload
    part = Part.new
    begin
      if params[:part][:xls_file]
        uploaded_io = params[:part][:xls_file]
        workbook = Spreadsheet.open(uploaded_io.tempfile)
        sheet = workbook.worksheet 0
        error_location = 0          #记录出错位置
        Part.transaction do
          sheet.each do |row|
            error_location += 1
            if row[7].is_a?(Float)
              chart = Chart.find_or_create_by_name(row[1])
              category = Category.find_by_name(row[2])
              part = Part.new(
                :project_id  => params[:part][:project_id],
                :number      => row[0],
                :chart_id    => chart.id,
                :category_id => category.id,
                :name        => row[3],
                :quantity    => row[6].to_i,
                :weight      => row[7].to_f,
                :description => row[9])
              unless part.valid?
                raise part.errors.full_messages
              else
                part.save
              end
            end
          end
          redirect_to parts_path(:project_id => params[:part][:project_id]), :notice => I18n.t("flash.parts.upload_success.notice")
        end
      else
        raise "import empty!"
      end
    rescue => err
      #将出错信息记录到log中
      logger.error("#{error_location} row Error!")
      logger.error(part.errors.full_messages)
      logger.error(err)
      #将错误信息显示到页面
      if part.errors.blank?
        error_message = "没有选择导入文件!"
      else
        error_message = "导入失败!第#{error_location}行出错:" + part.errors.full_messages.to_s
      end
      redirect_to :back, :notice => error_message
    end
  end
  
The Spreadsheet Libraryhttp://spreadsheet.rubyforge.org/GUIDE_txt.html

 

0
1
分享到:
评论

相关推荐

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

    Rails中上传文件保存中文文件名乱码

    在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称的文件时,文件名可能会出现乱码。这个问题主要是由于字符编码不兼容导致的。Rails默认使用UTF-8编码,但文件系统或者某些外部...

    rails_多文件上传

    Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...

    rails ajax提交文件或图片

    在本篇博文中,我们将深入探讨如何在Rails中利用AJAX提交文件或图片。 首先,我们需要设置一个表单来允许用户上传文件。在Rails中,`form_for`辅助方法可以帮助我们创建一个表单,但为了支持AJAX提交,我们需要将其...

    jquery-fileupload-rails, 用于 Rails的jQuery文件上传集成.zip

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

    rails 文件上传

    本篇文章将深入探讨Rails中的文件上传机制,并结合给定的“rails 文件上传”主题,提供关于如何在Rails应用中实现文件上传的详细知识。 1. **ActionDispatch::Http::UploadedFile**: 当用户通过表单上传文件时,...

    升级版本后Rails的文件上传

    在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在应用的升级过程中,处理文件上传的策略可能会有所变化。Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3...

    to_xls-rails:将Rails ActiveRecord或Mongid数据导出到Excel文件

    这个简单的插件使您能够调用to_xls到Rails的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git =&gt; ...

    使用Rails上传和转换视频

    在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...

    Rails的文件附件扩展Paperclip.zip

    Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip

    rails-uploader:用jQuery-File-Upload实现Rails文件上传

    安装在Gemfile中: gem 'rails-uploader'在航线上: mount Uploader :: Engine =&gt; '/uploader' 迁移ActiveRecord: $ bundle exec rails g uploader:install用法存储上传文件的架构(cancan集成): class Asset &lt...

    rails_layout, 为各种前端框架生成 Rails 应用程序布局文件.zip

    rails_layout, 为各种前端框架生成 Rails 应用程序布局文件 RailsLayout gem使用这里 gem 可以设置你选择的前端框架的布局文件:Zurb基础 5.3Bootstrap 4.0Bootstrap 3.3它还将为 Bootstrap 或者基础设置设计视图。...

    在rails中 使用RSpec生产CHM文档

    这可能涉及到阅读Rails应用的控制器、模型、视图和库文件,找出生成CHM的具体实现。同时,标签“工具”意味着可能涉及到了其他辅助工具,如文本处理、HTML转换或版本控制工具,它们可能在生成和管理CHM文档过程中...

    关于rails 3.1 cucumber-rails 1.2.0

    在 Rails 应用中使用 Cucumber-Rails,开发者可以创建一个名为`features`的目录,里面包含这些Gherkin特性文件。每个特性文件描述了一个或多个业务场景,并使用关键字`Given`、`When`、`Then`等来定义步骤。这些步骤...

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    终于知道怎么把rails Web程序打包成可执行文件了

    在Ruby on Rails开发中,将Web程序打包成可执行文件是一项常见的需求,这可以使应用程序更加便携,方便在没有Rails环境的计算机上运行。这里,我们主要探讨如何将Rails应用转化为独立的可执行文件,结合提供的标题和...

Global site tag (gtag.js) - Google Analytics