本来想做一个的是一个用户直接选定EXCEL文件提交后将信息显示到页面
但是这个HTTP不让做,所以就做了个先上传到服务器再操作.
先说说我是怎么实现上传的吧!
首先试图就不用说了,看下就知道了
<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="names[]"></br>';
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str);
}
</script>
<%form_tag ({:action=>"upload"},:multipart=>true ) do %>
<div id="MyFile">
文件路径:<input id="file" name="file[]" size="30" type="file" /><br>
保存文件名 <input type="text" id="uploadfile_description" name="names[]">(无须填写后缀)<br>
</div><input type="button" value="添加多个" onclick="addText()"/>
<input style="cursor:pointer" type="submit" value="上传"/>
<%end%>
添加了一些JS, 用于同时提交多个文件.
然后就是控制器了
def upload
unless request.get?
i=params[:file].size
for num in (0..i-1)
if params[:file][num].original_filename[-3,3] == "xls"
filename = uploadFile(params[:file][num],params[:names][num])
else
flash[:notice] = "上传失败,上传的并非EXCEL文件!"
end
end
end
end
protected
def uploadFile(file,filenames)
if !file.original_filename.empty?
@filename = getFileName(file.original_filename,filenames)
File.open("#{RAILS_ROOT}/excel/#{@filename}", "wb") do |f|
f.write(file.read)
end
return @filename
end
end
def getFileName(filename,filenames)
if !filename.nil?
filename = filenames+".xls"
return filename
end
end
这里需要解释下的是, 文件将保存在RAILS_ROOT/excel/文件夹里面,这个可以根据需要改变.
依照上面应该能将文件成功保存到EXCEL文件夹下面
顺带现实文件夹下文件的方法.
辅助方法里面些上这些
require 'find'
def root_excel
options = Array.new
Find.find(RAILS_ROOT + "/excel") do |lang|
if lang =~ /\.xls$/
lang_pattern = File.basename(lang)
options << lang_pattern
end
end
options
end
再在试图中加上
<%for excel in root_excel%>
<%=excel%>
<%end%>
EXCEL的文件就能显示出来了
上传了就可以去显示了
http://sayid2008.iteye.com/blog/188472提供显示
分享到:
相关推荐
《黑客攻防技术宝典:Web实战篇(第2版)》是一本专注于Web应用程序安全的实战指南,由Dafydd Stuttard和Marcus Pinto撰写,由石华耀和傅志红翻译。该书深入浅出地探讨了Web应用程序的安全风险和攻防策略,适合网络...
《WPF编程宝典:使用C# 2012和.NET 4.5 第4版》是一本全面深入探讨Windows Presentation Foundation (WPF) 的技术书籍,它以C# 2012和.NET Framework 4.5为开发语言和平台。这本书详细介绍了如何利用WPF创建现代化、...
高中化学通关宝典:高中化学方程式总结.pdf
小学数学通关宝典:小学奥数.pdf
《办公宝典:Excel 2003/2002/2000函数大全》是一本翔实的介绍Excel函数的图书。全书深入地探讨了Excel公式与函数的作用,收录了Excel 2003/2002/2000所有函数,通过实务案例对函数的定义和使用方法做了详细说明。...
WPF编程宝典:使用C# 2012和.NET 4.5(第4版),完整扫描版. 带书签,经本人整理裁剪适合手机屏,1-3章为清晰版,其它为扫描版
哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你,也请不要下载了我的,再传上来低积分给他人下载,请尊重...
【汇率实战宝典:分清汇率黑白】 汇率作为金融市场的核心元素之一,是全球经济互动的重要桥梁。华创宏观·张瑜团队的这份培训材料详细解析了汇率的定价机制、波动影响因素以及人民币国际化等关键议题,旨在帮助投资...
初中语文通关宝典:中考现代文阅读提分笔记.pdf
小学语文通关宝典:小学生必背古诗词75+80首.pdf
SEO实战宝典:实用工具+步骤图解+典型案例,精品学习资源分享,值得收藏,学习
哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你,也请不要下载了我的,再传上来低积分给他人下载,请尊重...
哥自己在淘宝上买的PDF,哥花的是钱换的是积分,而且换的积分只是为了更多的上传好的资料共享给大家,如果你要是觉得哥要的分高的可以无视飘过哈,哥不怪你,也请不要下载了我的,再传上来低积分给他人下载,请尊重...
如题,Android 3D游戏开发技术宝典:OpenGL ES 2.0书中的全部源代码。该书由浅入深的讲解了OpenGL ES 2.0在3D游戏开发中的各个方面,还给出了BN赛艇、火力篮球、夜鹰行动三个经典游戏的全部源代码。
《电商产品经理宝典:电商后台系统产品逻辑全解析》围绕“电商后台产品”,从电商的整体产品架构入手,逐步剖析各支撑子系统。通过学习电商产品后台的架构和逻辑,可以让读者从庞大的后台产品体系中,慢慢学会从整体...
新手配色宝典:综合配色技法 软件设计用得到的书籍。
Eclipse插件开发是软件开发领域中的一个重要环节,它允许开发者扩展Eclipse集成开发环境(IDE)的功能,以满足特定的开发需求。GEF(Graphical Editing Framework)是Eclipse平台的一部分,专为构建图形化编辑器而...
《.NET开发经典名著·WPF编程宝典:使用C# 2012和.NET 4.5(第4版)》全面讲解WPF的实际工作原理,是一本WPF权威著作。在紧贴实用示例这一思想的引导下,列出实用提示,引导以专业的方式使用WPF。《.NET开发经典...
《移动开发宝典:Android Studio使用教程》是针对Android开发者精心编写的指南,旨在帮助读者深入理解和熟练掌握Android Studio这一强大的集成开发环境(IDE)。Android Studio是Google为Android应用开发提供的官方...
初中物理通关宝典:物理实验与探究.pdf