(一)文件的上传:在这一部分,我要将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. NOIP2016 DAY1 T1 玩具谜题

    题目描述 小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时 singer 告诉小 ...

  2. Vue - vue.js 常用指令

    Vue - vue.js 常用指令 目录: 一. vuejs模板语法之常用指令 1. 常用指令: v-html 2. 常用指令: v-text 3. 常用指令: v-for 4. 常用指令: v-if ...

  3. Hash大法

    内容参考<算法竞赛进阶指南> 之前集训的时候听老师讲过,字符串题目中,hash一般不是正解,但是是一个优秀的暴力,可以拿比较多的部分分. hash涉及内容很多,这里只讨论字符串hash 可 ...

  4. 【codeforces 500E】New Year Domino

    [题目链接]:http://codeforces.com/problemset/problem/500/E [题意] 有n个多米诺骨牌; 你知道它们的长度; 然后问你,如果把第i骨牌往后推倒,然后要求 ...

  5. UVA 12507 Kingdoms

    D - Kingdoms Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu A kingdom ha ...

  6. [CSS3] CSS Background Images

    Body with background image and gradient html { background: linear-gradient(#000, white) no-repeat; h ...

  7. c++变量的作用域、生存期和可见性

    局部变量 范围:在一个函数内部定义的变量,作用范围仅仅限于本函数体内. 生存期:程序运行到本函数才会给局部变量分配内存单元.函数运行完成局部变量所占的存储单元就被释放 全局变量 在函数体外部定义的变量 ...

  8. centos下mysql多实例安装3306、3307实例(2014-10-15)

    背景说明       mysql的安装方法有多种,如二进制安装.源代码编译安装.yum安装等.yum安装仅仅能安装mysql 5.1 版本号:源代码安装编译的过程比較长.若没有对源代码进行改动且要求使 ...

  9. React-Native系列Android——Native与Javascript通信原理(一)

    React-Native最核心的是Native与Javascript之间的通信,并且是双向通信.Native层到Javascript层,Javascript层到Native层.虽说是两个方向,但实现上 ...

  10. $(window).load(function(){})跟$(document).ready(function(){})跟$(function(){})区别

    1.页面DOM加载完成 2.$(document).ready(function(){})  的简写是 $(function(){}) 执行 3.图片样式等所有HTML元素加载完毕 4.$(windo ...