- 浏览: 99941 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sevk:
require 'digest'
Digest::MD5. ...
ruby中MD5和SHA1加密方法 -
rogerer:
paginate 这个是哪里来的?
Ruby 多文件上传并写入数据库 -
joinall:
都没有取到手机号码
request.env -
mengwade:
清除cookie
引发CGI::Session::CookieStore::CookieOverflow异常 -
stmadman:
如何解决呢?
引发CGI::Session::CookieStore::CookieOverflow异常
一:建立表(用Ruby的 script/generate model attach) 顺便把模型也生成
打开 db/migrage/007_create_attaches.rb 修改成
class CreateAttaches < ActiveRecord::Migration
def self.up
create_table :attaches, :force => true do |t|
t.column :name, :string # 附件名称
t.column :url, :string # 资源路径
t.column :types, :string # 附件类型,存扩展名
t.column :size, :integer # 附件大小
t.column :last_update, :integer # 更新时间
end
end
def self.down
drop_table :attaches
end
end
执行 rake db:migrate 会自动创建表到指定的数据库
二:新建立一个UploadController 其内容如下(只是测试用,没有去美化)
class UploadController < ApplicationController
def index
@attach_pages, @attaches = paginate :attaches, :order => 'last_update DESC', :per_page => 10
end
def add
begin
# 因为是多文件上传,所以这里要循环
params[:uploadFile].each do | file |
if file.kind_of?(StringIO) || File.exist?(file)
# 调用自定义的模型来上传文件,传入session_id 来重命名文件,保证文件不重名
attach = Attach.new(file, session.session_id)
attach.save
end
end
rescue
raise
end
redirect_to :action => "index"
end
end
三:修改刚才自动生成的模型 Attach
class Attach < ActiveRecord::Base
def initialize(upload, session_id)
file_upload(upload, session_id) # 执行文件上传
super()
self.name = @name
self.url = @url
self.types = @type
self.size = @size
self.last_update = @last_update
end
# 文件上传
def file_upload(upload, session_id)
time_now = Time.now
@init_dir = "upload/#{time_now.strftime('%Y-%m-%d')}"
begin
FileUtils.mkpath(upload_path) unless File.directory?(upload_path)
if upload.kind_of?(StringIO)
upload.rewind
end
origName = upload.original_filename
baseName = File.basename(origName, ".*") # 取得文件名字
extName = File.extname(origName).downcase # 取得文件扩展名
tmpName = "_1"
tmpExtName = "_" + time_now.to_i.to_s + extName
# 重命名
baseName = session_id.nil? ? Digest::MD5.hexdigest(baseName).to_s : session_id.to_s
baseName = baseName.upcase
endName = baseName + tmpExtName
# 生成不重复的文件名
while File.exist?(upload_path(endName))
arr = endName.scan(/[a-zA-Z0-9_]+/)[0].split("_")
endName = 2 == arr.size ? (baseName + tmpName + tmpExtName ) : (baseName + "_" + arr[1].succ.to_s + tmpExtName )
end
# 将文件写入磁盘
File.open(upload_path(endName), "wb") { |f| f.write(upload.read) }
@name = origName
@url = "/#{@init_dir}/#{endName}"
@type = (extName.delete ".")
@size = upload.size
@last_update = time_now.to_i
rescue
raise
end
end
# 生成绝对路径
def upload_path(file = nil)
"#{RAILS_ROOT}/public/#{@init_dir}/#{file.nil? ? '' : file}"
end
end
四:修改views/upload/index.rhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传测试</title>
</head>
<body>
<!-- 用于显示已经上传的文件 -->
<table border="1">
<tr>
<% for column in Attach.content_columns %>
<th><%= column.human_name %></th>
<% end %>
</tr>
<% for attach in @attaches %>
<tr>
<% for column in Attach.content_columns %>
<td><%=h attach.send(column.name) %></td>
<% end %>
</tr>
<% end %>
</table>
<!-- 用[]命名是为了Ruby得到的是一个文件数组 -->
<h1>文件上传</h1>
<% form_tag({:action => :add}, {:multipart => true}) do -%>
文件名称1:<%= file_field_tag "uploadFile[]" -%> <br/><br/>
文件名称2:<%= file_field_tag "uploadFile[]" -%> <br/><br/>
文件名称3:<%= file_field_tag "uploadFile[]" -%> <br/><br/>
文件名称4:<%= file_field_tag "uploadFile[]" -%> <br/><br/>
文件名称5:<%= file_field_tag "uploadFile[]" -%> <br/><br/>
<%= submit_tag "文件上传", :disable_with => "文件上传中..." , :name => "btnSave", :id => "btnSave" %>
<% end %>
</body>
</html>
发表评论
-
ror集成FCKEditor
2009-04-16 14:04 939FCKEditor是一个开源的,功能强大的富文本编辑器,在官方 ... -
Rails里如何结合ExceptionNotification配置gmail账户发邮件
2009-02-19 15:24 16011,安装ExceptionNotification ruby ... -
request.env
2009-02-13 11:10 3020@client_ip = request.env[" ... -
引发CGI::Session::CookieStore::CookieOverflow异常
2009-02-03 15:41 2268在rails2.1开始默认使用cookie保存session后 ... -
ActiveRecord(一)--基础
2009-01-05 15:31 1950这一篇主要讲:如何连接到数据库,如何映射表,以及如何处理 ... -
rails版本的改变(二)——rails的介绍
2009-01-05 15:13 1601Rails 2.2 新特性提示 10月24日,Rails发 ... -
rails版本的改变(一)——rails的介绍
2009-01-05 12:10 1136Rails框架首次提出是在2004年7月,它的研发者是26岁的 ... -
rails
2008-12-29 16:35 1849Rails框架首次提出是在2004年7月,它的研发者是26岁的 ... -
windows搭建ruby on rails 的开发环境
2008-12-29 16:23 13891,安装ruby解释器 在 http://rubyfo ... -
用ror开发的无忧换书网,大家看看给点意见
2008-11-12 18:39 1667自己用ror开发的一个用于发布二手书买卖信息的网站(www.5 ... -
校内api
2008-10-17 16:06 2035controller: @user = params[:x ... -
安装ruby的数据库适配器
2008-08-20 15:04 1288源码安装数据库mysql之后启动项目报错:Can't conn ... -
ruby中MD5和SHA1加密方法
2008-08-14 13:55 9191MD5加密方式: require 'md5' puts MD5 ... -
ruby/rails中的中文处理
2008-08-13 16:35 1298ruby/rails中的中文处理 原文:http://www ... -
rails2.0下的file_column和imagick
2008-05-11 11:15 1779由于rails2.0下的file_column 和rma ... -
分页插件will_paginate(提供下载包)
2008-01-10 13:35 2363分页插件(will_paginate)是非常好用的,但 ... -
rails插件列表
2008-01-08 15:43 3300rails的插件列表 http://agilewebdeve ... -
ruport中文乱码
2008-01-08 13:41 1139def index table = Ruport ... -
ruport应用
2008-01-07 17:16 15041, install: gem install ruport ... -
也说REST
2007-12-14 17:09 81rails2.0发布了,REST成为热议的话题,我也凑一 ...
相关推荐
`save`方法接收一个文件对象,读取其二进制流,并使用`ActiveRecord`的`create`方法将文件信息写入数据库。如果需要将文件存储在服务器磁盘上而不是数据库中,可以修改`save`方法以使用`File.open`方法将文件写入...
2. **创建导入器**:创建一个新的Ruby文件,继承自`ActiveImporter::Base`,并指定目标模型和数据映射。 3. **定义数据映射**:映射电子表格的列到ActiveRecord模型的属性。 4. **执行导入**:在应用中调用`import`...
通过将datapackage.json文件上传到项目,可以为Mira提供有关CSV文件的信息。 该文件提供了您计划上传到项目的CSV文件的元数据。 即文件名,列名和类型,分隔符等。有关datapackage.json文件和表格数据包的更多信息...
Carrierwave提供了一种优雅的方式处理文件上传,同时与MiniMagick配合良好。添加`gem 'carrierwave'`和`gem 'carrierwave-mongoid'`到Gemfile,根据数据库类型(如Mongoid、ActiveRecord等)进行相应的配置。 创建...
Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...
至于标签"JavaScript",虽然在描述中没有直接提及JavaScript,但在Web开发中,JavaScript经常用于前端交互,包括处理文件上传和下载。如果这个任务涉及Web应用,那么JavaScript可能被用来创建用户友好的界面,实现...
- **write**: 写入文件。 - **run**: 执行Meterpreter的内置命令。 **file management**: - **cat**: 查看文件内容。 - **cd**: 更改目录。 - **del**: 删除文件。 - **download**: 下载文件。 - **edit**: 编辑...
文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 Hadoop的归档文件 使用Hadoop归档文件 不足 第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem 压缩 codec 压缩...
- **命令行接口**:介绍如何通过命令行对HDFS进行基本的操作,如文件上传、下载、删除等。 - **Java API**:提供详细的Java接口文档,用于开发基于HDFS的应用程序。 - **读取数据**:通过Hadoop URL读取文件,使用...
总结起来,"csv_uploader"项目涉及到Rails 5框架的基本使用,包括MVC架构、数据库操作、文件上传处理、用户界面设计以及错误处理等核心概念。通过实践这个项目,开发者可以深入理解如何在Rails中实现数据导入功能,...
后端开发方面,isdsp-desktop可能采用了服务器端的技术,如PHP、Python、Node.js或Ruby on Rails,来处理用户请求、管理数据库、实现文件上传和下载功能。数据库管理系统,如MySQL或MongoDB,用于存储和检索教师上传...
在GitHub Pages上发布图片,通常需要将图片文件上传到仓库的"gh-pages"分支。你可以通过GitHub API或者git命令行工具来实现这个过程。Ruby的Octokit库可以方便地与GitHub API交互: ```ruby require 'octokit' ...
在Web应用中,它可以用于导入用户上传的电子表格,进行数据验证或处理,然后将结果存入数据库。 6. **社区支持**:虽然原作者不再维护,但`roo` 仍在社区的积极开发下持续更新。新版本的开发应该从指定的存储库获取...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...