(一)文件的上传:在这一部分,我要将execl文件的内容上传到数据库中,完成这一功能。需要分为两步:

1:将文件上传到tomcat下

文件格式如下:

2:读取execl表中的内容到数据库中

首先:下载jar包:

commons-fileupload-1.3.2.jar
commons-io-2.5.jar

前台html和js:

   <input type="hidden" readonly name="src" id="fsrc" value="0" size="60"/>
<input type='text' readonly name='textfield' id='textfield' class='txt' style="height:30px;width:30%;"/>
<input type='button' class='btn' onClick="findFile()" value='浏览...' style="height:30px;background-color:#ff9900;outline:none;border:none;width:10%;" />
<input type="file" name="file" class="file" id="file" size="28" style="display:none;" onchange="document.getElementById('textfield').value=this.value" />
<input type="button" class="btn2" value="上传" onclick="upload()"/>
<a class="btn btn-success" href="lmxx.do?downLoad&fileName='栏目列表.xls'">下载</a>
 function upload(){

     var file="file";
var picElement=document.getElementById(file).value; var picFormat=picElement.substring(picElement.lastIndexOf('.')+1,picElement.length);
if(picFormat!="xls"&&picFormat!="xlsx"){
alert("请选择 excel 2003 (*.xls) 格式的文件!");
return;
} $.ajaxFileUpload({
url:"lmxx.do?upLoadExcel",
secureuri: false,
fileElementId:file,
dataType: 'JSON',
success:function(data){
data=decodeURIComponent(data);//解码
var arr=JSON.parse(data);//JSON.parse() 方法解析一个JSON字符串
$("#fsrc").val(arr.rPath);
$.post(
"lmxx.do?excelToDb&src="+$("#fsrc").val(),
function(data){
//data=decodeURIComponent(data);
//var arr=JSON.parse(data);
if(data==1){
alert("上传成功!");
}else{
alert("上传失败!");
} }
);
},
error: function (){
alert("上传失败!当前时间为:"+new Date().toLocaleTimeString()); }
});
}; function findFile(){
document.getElementById("file").click();
}

后台操作方法:

 @RequestMapping(params="upLoadExcel")
@ResponseBody
public String addFilemsgPic(MultipartFile file,HttpServletRequest request) throws Exception{
String path="/uploadExcelFiles";
path=request.getSession().getServletContext().getRealPath(path);//当前运行文件在服务器上的绝对路径
System.out.println(path);
//创建文件
File dir=new File(path);
if(!dir.exists()){
dir.mkdirs();
}
String uuid=UUID.randomUUID().toString();
//返回原来在客户端的文件系统的文件名
String fileName=file.getOriginalFilename();
//uuid+后缀名
String img=uuid+fileName.substring(fileName.lastIndexOf("."));//lastIndexOf报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置(即为后缀)。String.Substring (Int32)从此实例检索子字符串
FileOutputStream imgOut=new FileOutputStream(new File(dir,img));//根据 dir 抽象路径名和 img 路径名字符串创建一个新 File 实例。
imgOut.write(file.getBytes());//返回一个字节数组文件的内容
imgOut.close();
Map<String, String> map=new HashMap<String, String>(); map.put("picPath",img);//8b4aff41-420c-419a-b0ab-c18ca36198c6.xls
map.put("picName",fileName);//lanmu.xls
String rpath = path+"\\"+img; map.put("rPath",rpath);
JSONObject jsonObject = JSONObject.fromObject(map);//将json字符串转换为json对象
String r=jsonObject.toString();
String s=URLEncoder.encode(r, "utf-8");//加密
return s;
} @RequestMapping(params="excelToDb")
@ResponseBody
public int excelToDB(String src){ String newSrc = src.replace(" ", "+");
List<Lanmu> lmList=ReadeExcel.taPCL(newSrc);
int flag=ConnOrcl.connToTable(lmList);
if(flag==1)
return 1;
else
return 2;
}
ReadeExcel
 public class ReadeExcel {
public static List<Lanmu> taPCL(String file)
{
List<Lanmu> LTPC = new ArrayList<Lanmu>();
try
{
//选取excel文件
Workbook rwb=Workbook.getWorkbook(new File(file));//获得工作薄(Workbook)
//选取excel文件中的第一个工作薄
Sheet sheet = rwb.getSheet(0);
//得到excel表行数
int RowNum = sheet.getRows();
for(int i=1;i<RowNum;i++)
{
//获得excel表中第1列第i行单元格
Cell cell0 = sheet.getCell(0, i);
//获得excel表中第2列第i行单元格
Cell cell1 = sheet.getCell(1, i);
//获得cell0单元格内容
String name = cell0.getContents();
//获得cell1单元格内容
String state = cell1.getContents();
Lanmu lanmu = new Lanmu();
lanmu.setName(name);
lanmu.setState(state);
LTPC.add(lanmu);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return LTPC;
}
}

ConnOrcl
 public class ConnOrcl {

         private static Connection conn;
private static Statement stat;
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static int SUCCESS=1;
private static int FILE=2;
public static int connToTable(List<Lanmu> lanmus)
{
try
{
//数据库连接
Class.forName(driver);
conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "GKBMFZXT", "GKBMFZXT");
stat = conn.createStatement();
int flag=0;
//遍历list,插入数据库
for(Lanmu lanmu : lanmus)
{
StringBuffer sql = new StringBuffer();
//构造sql语句
sql.append("insert into lanmu_table (id,name,state) values ('");
String id=UUID.randomUUID().toString().replace("-","");
String name = lanmu.getName();
String state = lanmu.getState();
sql.append(id).append("','");
sql.append(name).append("','");
sql.append(state).append("')");
//执行sql语句
stat.execute(sql.toString());
flag++;
} if(flag==lanmus.size()){
return SUCCESS;
}
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch(SQLException e)
{
e.printStackTrace();
}
finally
{
if(null != stat)
{
try
{
stat.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
if(null != conn)
{
try
{
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
return FILE;
} }
(二)文件的下载
 @RequestMapping(params="downLoad")
public String downLoad(HttpServletRequest request,HttpServletResponse response)throws Exception{ String fileName=request.getParameter("fileName");
File f=new File("C:\\Users\\ztl\\Desktop\\lanmu.xls"); BufferedInputStream buffer=null;
OutputStream out=null;
try{
if(!f.exists()){ response.sendError(404,"File not find!");
return "File not find!"; }
buffer = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len=0;
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
out = response.getOutputStream();
while((len = buffer.read(buf))>0){
out.write(buf,0,len);
}
out.flush();
response.flushBuffer(); }catch(Throwable e){
e.printStackTrace();
}finally{ if(out!=null){
out.close();
}
} return "view/luntan/lanmu_list"; }

java实现文件的上传与下载的更多相关文章

  1. java客户端文件的上传和下载

    java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...

  2. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  3. Java中文件的上传与下载

    文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar  commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...

  4. java+实现文件的上传和下载

    项目截图 路径配置 将localhost:8080/up6全部替换为实际项目路径 使用mysql文件夹下的脚本创建数据表. 创建后可以在数据库中看到创建好的数据表 2.修改数据库连接 3.修改上传地址 ...

  5. java+web文件的上传和下载代码

    一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了.我这里分享一下我自己开发的一套大文件上传控件 ...

  6. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  7. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  8. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  9. java 文件的上传和下载

    主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...

随机推荐

  1. tyvj1864 [Poetize I]守卫者的挑战

    期望dp 不考虑打的顺序,只要最后能把地图都装下就行了,因此把概率和容量装进一个结构体里面,把地图放后面. 记一个状态f[i][j][k]表示前i个比赛,赢了j场,容量k的期望,转移即可. #incl ...

  2. MySQL主从宕机的解决方法

    测试系统:centos6.5系统 测试环境IP地址划分: master: 192.168.80.130 slave:192.168.80.143 slave:192.168.80.146 首先模拟(M ...

  3. qt quick中qml编程语言

    Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日   注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...

  4. 【codeforces 229C】Triangles

    [题目链接]:http://codeforces.com/problemset/problem/229/C [题意] 给你一张完全图; 然后1个人从中选择m条边; 然后另外一个人从中选择剩余的n*(n ...

  5. python写个简单的文件上传是有多难,要么那么复杂,要么各种,,,老子来写个简单的

    def upload(url,params): ''' 上传文件到server,不适合大文件 @params url 你懂的 @params {"action":"xxx ...

  6. javascript系列-class3.循环语句

    欢迎加入前端交流群来py: 转载请标明出处! while循环   while(循环终止条件){       }   案例     输出0~100个数字  1 . 3 .  5 不输出   输出一百数字 ...

  7. (七)日志采集工具sleuth--分布式链路跟踪(zipkin)

    微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败.随着业务的不断 ...

  8. 关于JQuery中的事件冒泡

    什么是事件冒泡? 事件冒泡就是当父元素和子元素存在同一事件时在子元素的事件处理程序中会自动调用其父级元素的事件处理程序. demo: <!DOCTYPE html> <html xm ...

  9. Android ViewPager系列之ViewPager一屏显示多个子页面

    ViewPager一屏显示多个子页面,常见的有两种形式: 1.当前展示的页面右侧显示一部分下个页面的内容 2.当前页面居中,左右两边分别显示上一个页面.下一个页面 第 1 种表现形式的实现代码 其实这 ...

  10. (转载)所有分类 > 开发语言与工具 > 移动开发 > Android开发 Android中的Service:默默的奉献者 (1)

    前言 这段时间在看一些IPC相关的东西,这里面就不可避免的要涉及到service,进程线程这些知识点,而且在研究的过程中我惊觉自己对这些东西的记忆已经开始有些模糊了——这可要不得.于是我就干脆花了点心 ...