java实现文件的上传与下载
(一)文件的上传:在这一部分,我要将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实现文件的上传与下载的更多相关文章
- java客户端文件的上传和下载
java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...
- java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- Java中文件的上传与下载
文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...
- java+实现文件的上传和下载
项目截图 路径配置 将localhost:8080/up6全部替换为实际项目路径 使用mysql文件夹下的脚本创建数据表. 创建后可以在数据库中看到创建好的数据表 2.修改数据库连接 3.修改上传地址 ...
- java+web文件的上传和下载代码
一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了.我这里分享一下我自己开发的一套大文件上传控件 ...
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
- 初学Java Web(7)——文件的上传和下载
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...
- java web(四):request、response一些用法和文件的上传和下载
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
- java 文件的上传和下载
主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...
随机推荐
- 一般树--common tree
参照libyang中的lyd_tree的组织结构,写了一套通用树接口. github 的地址:https://github.com/HellsingAshen/mytc/tree/master/tc_ ...
- [剑指offer] 8+9. 跳台阶+变态跳台阶 (递归 时间复杂度)
跳台阶是斐波那契数列的一个典型应用,其思路如下: # -*- coding:utf-8 -*- class Solution: def __init__(self): self.value=[0]*5 ...
- STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
这里我主要说一下如何做一个USB下位机,这里主要分3部分:1.建立工程:2.添加报文描述符:3.数据的传输.这里就不讲USB的理论知识了,有想要了解的自行百度一下就可以了. 建立工程:工程建立参考:h ...
- js数字转换为float,取N个小数
javascript中的变量都是弱类型,所有的变量都声明为var,在类型转换过程中就没有java那么方便,它是通过 parseInt(变量).parseFloat(变量)等方法来进行类型转换的.注意: ...
- IDEA使用快捷键
sout+TAB键---->System.out.println();你可以按ctrl+j里面各种快捷键模板都可以看到. Intellij Idea get/set方法快捷键:Alt+Inse ...
- [terry笔记]一个在线美化sql的网站
http://www.dpriver.com/pp/sqlformat.htm 甚是好用.
- Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password
在配置JMX远程访问的时候,设置jmxremote.password文件权限,修改该文件时添加写权限,chmod +w jmxremote.password ,放开角色信息那俩行的注释,保存,再使用c ...
- storm-安装
storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你能够在你的本地机器上开发測试你的topology, 一切都在你的本地机器上模拟出来; 用远端模式的时候你提交的to ...
- emitter 增强 多条件触发
;(function(global ,undefined){ var evts = {} ,onceTag = '__event_once' function emit(event ){ ) if ( ...
- hdu 2032 一维数组实现杨辉三角
杨辉三角 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...