`
PBFox
  • 浏览: 67984 次
  • 性别: Icon_minigender_1
  • 来自: China
文章分类
社区版块
存档分类
最新评论

ruby on rails 实现多文件的上传

阅读更多
实现把文件上传到服务器,文件名/文件大小/文件的描述 上传到数据库



Application.rb代码如下:

# Filters added to this controller apply to all controllers in the application.

# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base

# Pick a unique cookie name to distinguish our session data from others'

session :session_key => '_uploadF_session_id'

def uploadFile(file)

if !file.original_filename.empty?

@filename=getFileName(file.original_filename)

File.open("#{RAILS_ROOT}/public/files/#{@filename}", "wb") do |f|

f.write(file.read)

end

return @filename

end

end

def getFileName(filename)

if !filename.nil?

return filename

end

end

def savefiles(file,description)

@filename=getFileName(file.original_filename)

@filesize=getFileName(file.length)

@uploadfile = Uploadfile.new

@uploadfile.filename=@filename

@uploadfile.filesize=@filesize/1024

@uploadfile.description=description

@uploadfile.save

end

end

upload_controller.rb代码如下:

class UploadController < ApplicationController

def upload

@uploadfile = Uploadfile.new

unless request.get?

i=params[:file].size

for num in (0..i-1)

if filename=uploadFile(params[:file][num])

savefiles(params[:file][num],params[:uploadfile][num])

end

end

end

end

end

upload.rhtml代码:

<script language="javascript">

HTMLElement.prototype.insertAdjacentHTML=function(where, html)

{

var e=this.ownerDocument.createRange();

e.setStartBefore(this);

e=e.createContextualFragment(html);

switch (where)

{

case 'beforeBegin': this.parentNode.insertBefore(e, this);break;

case 'afterBegin': this.insertBefore(e, this.firstChild); break;

case 'beforeEnd': this.appendChild(e); break;

case 'afterEnd':

if(!this.nextSibling) this.parentNode.appendChild(e);

else this.parentNode.insertBefore(e, this.nextSibling); break;

}

}

function addText() {

var str ='<input id="file1" name="file[]" size="30" type="file" /></br> <input type="text" id="uploadfile_description" name="uploadfile[]"></br>';

document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str);

}

</script>

<%=start_form_tag ({:action=>"upload"},:multipart=>true )%>

<div id="MyFile">

<input id="file" name="file[]" size="30" type="file" /></br>

<input type="text" id="uploadfile_description" name="uploadfile[]"></br>

</div>

<input type="button" value="add" onclick="addText()"/>

<input style="cursor:pointer" type="submit" value="upload"/>

<%=end_form_tag%>

分享到:
评论

相关推荐

    ruby on rails最新版

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...

    ruby on rails 3 tutorial.pdf

    《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...

    Ruby On Rails中文教材(PDF)

    10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...

    ruby on rails在线考试系统

    以上是关于“ruby on rails在线考试系统”的主要知识点,实际开发中还会涉及更多细节,如数据库设计、前端交互、用户体验优化等。这个系统需要综合运用Ruby on Rails的各种特性和最佳实践,以提供稳定、高效、易用的...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...

    ruby on rails社区网站开发源码

    13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...

    Ruby on Rails 指南 v5.0.1 中文版

    ### Ruby on Rails 指南 v5.0.1 中文版 #### Rails入门 - **前提条件**:为了能够顺利地开始Rails的学习之旅,读者需要具备一定的Ruby语言基础,并且对Web开发有一定的了解。 - **Rails是什么?**:Rails是一种...

    rails_多文件上传

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

    ruby on rails合集

    Ruby on Rails的社区非常活跃,拥有丰富的插件和gem(Ruby的库包),如Devise用于身份验证,CanCanCan进行权限管理,Carrierwave或Paperclip处理文件上传等。这些gem极大地扩展了RoR的功能,使得开发者可以快速搭建...

    Ruby on Rails 学习案例

    10. **Gem包管理**:Ruby的Gem是类似Python的pip或Node.js的npm的包管理工具,Rails应用广泛依赖于Gems,如Devise用于身份验证,Pundit或CanCanCan用于权限管理,Carrierwave或Paperclip处理文件上传等。 11. **...

    Ruby on Rails轻松使用

    10. **Gem包管理**:Ruby的Gem生态系统丰富,Rails项目通常依赖于大量第三方Gem,如Devise(身份验证)、CanCanCan(授权)、Carrierwave(文件上传)等,通过Gemfile管理这些依赖。 11. **Asset Pipeline**:Rails...

    征服-Ruby On Rails.rar

    这些gem扩展了Rails的功能,例如Devise用于身份验证,CanCanCan用于授权管理,Pundit用于细粒度的权限控制,Paperclip或Carrierwave处理文件上传,Ransack提供高级搜索功能,以及Sidekiq或Resque实现后台任务处理。...

    Agile Web Development With Ruby On Rails EN第一版

    另外,书中可能还会讲解Rails的插件和gem的使用,如Devise用于用户认证,CanCanCan进行权限控制,或者Paperclip或Carrierwave处理文件上传等。这些gem是Rails生态系统的重要组成部分,让开发者能够快速集成常用功能...

    Ruby on rails blog (博客程序)

    Ruby on Rails 是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,使得开发者可以高效地构建功能丰富的Web应用程序。在这个“Ruby on Rails博客程序”中,我们将深入探讨如何在...

    Ruby on Rails入门例子

    Rails社区活跃,拥有丰富的插件和gem(Ruby的包管理器),如Devise用于身份验证,CanCanCan进行权限控制,Paperclip或Carrierwave用于文件上传等。这些gem极大扩展了Rails的功能,加速了开发进程。 在本教程中,你...

    Ruby on Rails敏捷开发最佳实践源代码

    6. **Gem生态系统**:Ruby on Rails依赖于Gem包管理系统,提供了丰富的第三方库和工具,如Devise用于身份验证,Pundit或CanCanCan处理授权,Carrierwave或Paperclip处理文件上传,以及ActiveAdmin或RailsAdmin这样的...

    Wrox - Professional Ruby on Rails (Feb 2008)

    书中可能介绍了如何使用和开发Gem,以及常见的Rails插件如Devise(身份验证)、CanCanCan(授权)和Paperclip(文件上传)等。 9. **部署与性能优化**:书中可能会讲解如何将Rails应用部署到服务器,如使用...

    ruby on rails 安装手记

    最后,Rails社区非常活跃,有许多优秀的第三方gem库可以扩展Rails的功能,例如Devise用于用户认证,CanCanCan处理授权,Paperclip或Carrierwave处理文件上传等。通过`gem 'gem_name'`在`Gemfile`中添加gem,然后运行...

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

    通过深入研究和理解这些文件,你可以学习如何将Ruby on Rails、Hotwire和Tailwind CSS结合起来,构建出一个功能丰富的视频共享应用。 总的来说,这个项目提供了从后端数据处理到前端交互体验的完整实现,对于想要...

Global site tag (gtag.js) - Google Analytics