JSP下载txt 和 Excel两种文件
JSP中导入导出Excel文件
JSP中导入导出Excel文件一.POI简介Jakarta POI 是apache的子项目,目标是处理ole2对象。
它提供了一组操纵Windows文档的Java API目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。
它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel 对象,你可以控制一些属性如sheet,cell等等。
二.HSSF概况HSSF 是sHorrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。
也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。
通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
前者很好理解,后者比较抽象,但操作效率要高得多。
三.开始编码1 .准备工作要求:JDK 1.4+POI开发包可以到 /dyn/closer.cgi/jakarta/poi/ 最新的POI工具包2 . EXCEL 结构HSSFWorkbook excel 文档对象介绍HSSFSheet excel的表单HSSFRow excel的行HSSFCell excel的格子单元HSSFFont excel字体HSSFName 名称HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾和这个样式HSSFCellStyle cell样式辅助操作包括HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表4 .可参考文档POI 主页:/poi/,初学者如何快速上手使用POI HSSF/poi/hssf/quick-guide.html 。
代码例子/user1/6749/archives/2005/18347.html里面有很多例子代码,可以很方便上手。
在JSP中导出pdf和excel
环境配置1 正确安装配置java的jdk2 将ireport放到c:\ireport3 将ant放到c:\ant(我用的是bea的ant路径是D:\bea\weblogic81\server\ant)4 将jasperreports-1.2.0.jar 放置到当前classpath中(没有加,我使用的Ireport\lib下已经存在了)5 将itext-1.3.1.jar放置到c:\ireport\lib(没有加,我使用的Ireport\lib下已经存在了)6 修改ireport\ireport.bat文件,加入以下内容set JAVA_HOME=C:\j2sdk1.4.2set ANT_HOME=D:\bea\weblogic81\server\set IREPORT_HOME=c:\ireport rem %ANT_HOME%\bin\ant javadocs %ANT_HO ME%\bin\ant iReport我修改的是:set JAVA_HOME=C:\j2sdk1.4.2set ANT_HOME=D:\bea\weblogic81\server\set IREPORT_HOME=F:\backup\iReport-1.2.0 rem %ANT_HOME%\bin\ant javadocs %ANT_HOME%\bin\ant iReport(不过对以上修改,感觉没有什么用处)7 提供一个正常提供服务的数据库现在高版本的ireport是不需要进行配置,可以直接使用的.了解制作报表用的包1 jasperreports-1.0.1.jar jasperreports是iReport的核心内容,jsperreport是一个报表制作程序,用它的规则制定一个xml文件,然后编译生成一个.jsper文件,这个.jsper文件是我们真正使用的,它很象.jsp文件,使用的是它编译后的servlet. (http://jasperreports.sou /)2 itext-1.3.1.jar iText是一个开放源码的Java类库,是用来生成PDF文件的。
js下载文件的实现方法一
js下载文件的实现方法一f8bjs下载文件的实现方法及注意js中实现文件下载(一)最简单的方式是在页上做超级链接如:<a href="music/abc.m3">下载</a>。
但是这样服务器上的目录资源会直接暴露给最终用户会给站带来一些不安全的因素。
因此可以采用其它方式实现下载可以采用:1、RequestDisatcher的方式进行;2、采用文件流输出的方式下载。
(推荐)1、采用RequestDisatcher的方式进行Js代码<%resonse.setContentTye("alication/x-download");//设置为下载alication/x-downloadString filedownload = "/要下载的文件名";//即将下载的文件的相对径String filedislay = "最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称String filenamedislay = URLEncoder.encode(filedislay,"UTF-8"); resonse.addHeader("Content-Disosition","attachment;filena me=" + filedislay);try{RequestDisatcher dis = alication.getRequestDisatcher(filedownload);if(dis!= null){dis.forward(request,resonse);}resonse.flushBuffer();}catch(Excetion e){e.rintStackTrace();}finally{}%><%resonse.setContentTye("alication/x-download");//设置为下载alication/x-downloadString filedownload = "/要下载的文件名";//即将下载的文件的相对径String filedislay = "最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称String filenamedislay = URLEncoder.encode(filedislay,"UTF-8"); resonse.addHeader("Content-Disosition","attachment;filena me=" + filedislay);try{RequestDisatcher dis = alication.getRequestDisatcher(filedownload);if(dis!= null){dis.forward(request,resonse);}resonse.flushBuffer();}catch(Excetion e){e.rintStackTrace();}finally{}%>2、采用文件流输出的方式下载Js代码<%age language="java" contentTye="alication/x-msdownload"ageEncoding="gb2312"%><%//关于文件下载时采用文件流输出的方式处理://加上resonse.reset()并且所有的%>后面不要换行包括最后一个;resonse.reset();//可以加也可以不加resonse.setContentTye("alication/x-download");//alication.getRealath("/main/mvlayer/CaSetu.msi");获取的物理径String filedownload = "想办法找到要提下载的文件的物理径+文件名";String filedislay = "给用户提的下载文件名";String filedislay = URLEncoder.encode(filedislay,"UTF-8"); resonse.addHeader("Content-Disosition","attachment;filena me=" + filedislay);java.io.OututStream out =null;java.io.FileInutStream in = null;try{out = resonse.getOututStream();in = new FileInutStream(filenamedownload);byte[] b = new byte[1024];int i = 0;while((i = in.read(b)) > 0)out.write(b, 0, i);}//out.flush();//要加以下两句话否则会报错//ng.IllegalStateExcetion: getOututStream() has already been called for //this resonseout.clear();out = hBody();}catch(Excetion e){System.out.rintln("Error!");e.rintStackTrace();}finally{if(in != null){in.close();in = null;//这里不能关闭//if(out != null)//{//out.close();//out = null;//}}%><%age language="java" contentTye="alication/x-msdownload"ageEncoding="gb2312"%><%//关于文件下载时采用文件流输出的方式处理://加上resonse.reset()并且所有的%>后面不要换行包括最后一个;resonse.reset();//可以加也可以不加resonse.setContentTye("alication/x-download");//alication.getRealath("/main/mvlayer/CaSetu.msi");获取的物理径String filedownload = "想办法找到要提下载的文件的物理径+文件名";String fifc1ledislay = "给用户提的下载文件名";String filedislay = URLEncoder.encode(filedislay,"UTF-8"); resonse.addHeader("Content-Disosition","attachment;filena me=" + filedislay);java.io.OututStream out = null;java.io.FileInutStream in = null;try{out = resonse.getOututStream();in = new FileInutStream(filenamedownload);byte[] b = new byte[1024];int i = 0;while((i = in.read(b)) > 0){out.write(b, 0, i);}//out.flush();//要加以下两句话否则会报错//ng.IllegalStateExcetion: getOututStream() has already been called for //this resonseout.clear();out = hBody();}catch(Excetion e){System.out.rintln("Error!");e.rintStackTrace();}finally{if(in != null){in.close();in = null;}//这里不能关闭//if(out != null)//{//out.close();//out = null;//}}%>对于第二种方法我认为应该是比较常用的。
JS操作EXCEL大全
JS操作EXCEL大全JavaScript 是一种非常流行的编程语言,广泛用于 Web 开发。
虽然JavaScript 不是用来处理 Excel 文件的首选语言,但我们仍然可以使用一些第三方库和 JavaScript 内置的功能来操作 Excel 文件。
在接下来的文章中,我们将介绍一些常见的技术和库,以便在 JavaScript 中操作Excel 文件。
1. 使用 JavaScript 原生 API 操作 Excel 文件:JavaScript 提供了一些用于处理文件的 API,可以使用这些 API 执行一些基本的 Excel 文件操作。
例如,可以使用 FileReader API 读取Excel 文件,然后使用 JavaScript 操作数据。
这种方式主要适用于读取较小的 Excel 文件。
2.使用第三方库:2.1. ExcelJS:ExcelJS 是一个流行的 JavaScript 库,用于在浏览器和 Node.js 中操作 Excel 文件。
它提供了许多用于读取、写入和修改Excel 文件的方法。
您可以使用 ExcelJS 创建、读取和修改 Excel 文件,并进行复杂的数据操作,例如合并单元格、设置单元格样式等。
2.2. xlsx-populate:xlsx-populate 是另一个用于操作 Excel 文件的库,它提供了丰富的 API,使开发人员能够在浏览器和 Node.js 中读取和写入 Excel 文件。
它支持各种 Excel 功能,如图表、公式、数据验证等。
2.3. Excel4Node:Excel4Node 是一个用于操作 Excel 文件的轻量级库。
它使用 Apache POI 库来处理 Excel 文件,并提供了一组简单而强大的 API。
你可以使用 Excel4Node 通过浏览器或 Node.js 读取、写入和修改 Excel 文件。
3. 数据导出为 Excel 格式:你可以使用 JavaScript 将数据导出为 Excel 格式。
jsp下载文件的实现方法 及 注意
这样,就可以保证在用户点击下载链接的时候浏览器一定会弹出提示窗口来询问你是下载还是直接打开并允许你选择要打开的应用程序,除非你设置了浏览器的一些默认行为。
//application.getRealPath("/main/mvplayer/CapSetup.msi");获取的物理路径
String filedownload = "想办法找到要提供下载的文件的物理路径+文件名";
String filedisplay = "给用户提供的下载文件名";
{
in.close();
in = null;
}
//这里不能关闭
//if(outp != null)
//{
//outp.close();
//outp = null;
//}
}
%>
对于第二种方法,我认为应该是比较常用的。不过有几个地方是值得我们注意的:
java.io.OutputStream outp = null;
java.io.FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filenamedownload);
{
in.close();
in = null;
}
//这里不能关闭
用Jsp来实现文件下载功能的几种方式
1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。
这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。
这个就不写示例了。
2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。
(示例如下)
3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。
不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。
servlet端示例
JApplet端示例
4.顺便把JApplet上传文件的代码也贴上来. JApplet端示例
servlet端代码示例
总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。
我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。
以及把文件转换成流或把流转换成文件的操作。
jsp 中poi 实现导入导出excel
1.excel导入数据导入时候注意数字类型和字符类型的区别,数字类型要在excel中设置数字类型,对应数据库中也应该建立对应类型<%@ page import="com.guanri.database.*,java.util.*,com.guanri.util.*,com.jspsmart.upload.*" contentType="text/html; charset=GBK" %><%@ pageimport="java.util.*,java.io.*,org.apache.poi.poifs.filesystem.*,ermodel.*" %><jsp:include page="/admin/checkLogin.jsp"/><%String result = "";String contracId = "";String projectname = "";double projectscale = 0;String projecttype="";String projectconunit="";double designtime = 0;String designphase = "";double completedtime = 0;String participants = "";String positionofpro = "";String dutiesas = "";int inum = 0;int unum = 0;int rnum = 0;int snum = 0;String rmstr = "";Table tb = new Table();Vector vc = null;Hashtable rows = new Hashtable();String sql = "";if(request.getMethod().equalsIgnoreCase("POST")) {String sdir = "/download/xlsdir/"; //文件保存目录String filesep=System.getProperty("file.separator");String ssdir = filesep+"download"+filesep+"xlsdir"+filesep;Calendar c = Calendar.getInstance();String fname = c.getTimeInMillis()+".xls";String sfname = sdir + fname;String ss = "xls"; //支持的文件后缀名try{SmartUpload su = new SmartUpload();su.initialize(pageContext);su.setAllowedFilesList(ss);su.upload();com.jspsmart.upload.File file = su.getFiles().getFile(0);if(!file.isMissing()){file.saveAs(sfname);// System.out.println(application.getRealPath("/")+ssdir+fname );FileInputStream finput = new FileInputStream(application.getRealPath("/")+ssdir+fname );//设定FileINputStream读取Excel档POIFSFileSystem fs = new POIFSFileSystem( finput );HSSFWorkbook wb = new HSSFWorkbook(fs);HSSFSheet sheet = wb.getSheetAt(0);//读取第一个工作表,宣告其为sheetfinput.close();HSSFRow row=null;//宣告一列HSSFCell cell=null;//宣告一个储存格short i=0;short y=0;//以巢状迴圈读取所有储存格资料System.out.println("sheet.getLastRowNum()="+sheet.getLastRowNum());for (i=1;i<=sheet.getLastRowNum();i++){row=sheet.getRow(i);for (y=1;y<=row.getLastCellNum();y++){cell=row.getCell(y);switch(y){case 1: //合同号if(cell!=null){contracId=(cell.getStringCellValue()).trim();}break;case 2: //项目名称if(cell!=null){projectname=(cell.getStringCellValue()).trim();}break;case 3: //项目规模if(cell!=null){projectscale=cell.getNumericCellValue();}break;case 4: //项目类型if(cell!=null){projecttype=(cell.getStringCellValue()).trim();}break;case 5: //项目建设单位if(cell!=null){projectconunit=(cell.getStringCellValue()).trim();}break;case 6: //设计时间if(cell!=null){designtime=cell.getNumericCellValue();}break;case 7: //设计阶段if(cell!=null){designphase=(cell.getStringCellValue()).trim();}break;case 8: //竣工时间if(cell!=null){completedtime=cell.getNumericCellValue();}break;case 9: //参与人姓名if(cell!=null){participants=(cell.getStringCellValue()).trim();}break;case 10: //担任项目职务if(cell!=null){positionofpro=(cell.getStringCellValue()).trim();}break;case 11: //担任职责if(cell!=null){dutiesas=(cell.getStringCellValue()).trim();}break;}}sql = "insert into hy_pro_briefinfo(contracId,projectname,projectscale,projecttype,projectconunit,designtime,designphase,completedtime, participants,positionofpro,dutiesas) ";sql+="values('"+contracId+"','"+projectname+"','"+projectscale+"','"+projecttype+"','"+projectconunit+"','"+(int)designti me+"','"+designphase+"','"+(int)completedtime+"','"+participants+"','"+positionofpro+"','"+dutiesas+"')"; //System.out.println(sql);snum = tb.update(sql);if(snum<=0){++rnum;rmstr = rmstr + ",";}else{++inum;}mit();tb.setCommit(true);// System.out.println("result="+result);//System.out.println("snum="+snum +"inum="+inum);}result = "共成功上传"+(inum+unum)+" 条记录,其中新增"+inum+" 条,更新"+unum+" 条;失败"+rnum+" 条("+rmstr+" )";// System.out.println(result);java.io.File f = new java.io.File(application.getRealPath("/")+ssdir+fname);f.delete();}else{result = "上传文件失败";}}catch(Exception ex){ex.printStackTrace();java.io.File f = new java.io.File(application.getRealPath("/")+ssdir+fname);//f.delete();// result = ex.getMessage();if(result.indexOf("1010")>0){result = "文件格式不对!只支持"+ss+"格式文件";}if("You cannot get a numeric value from a String based cell".equals(result)){result = "格式错误:在数字单元格中存在非数字!第"+(unum+inum+1)+"条记录出错";}}//finally{// response.sendRedirect("pro_per_info.jsp");// }}%><jsp:include page="/admin/BodyStart" />Ext.MessageBox.alert("提示",'<%=result %>');setTimeout("window.location.href='pro_per_info.jsp'", 1000);<jsp:include page="/admin/BodyEnd" />2.excel导出数据导出的时候注意中文编码的问题response.reset();response.setContentType("application/vnd.ms-excel");必须按照先后顺序书写<%@ page language="java"import="com.guanri.database.*,java.util.*,com.guanri.util.*,com.jspsmart.upload.*" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%><%@ page import="java.util.*,java.io.*,ermodel.*" %><%//response.setContentType("application/msexcel;charset=utf-8" );//response.setContentType("text/html;charset=utf-8");response.reset();response.setContentType("application/vnd.ms-excel");request.setCharacterEncoding("gb2312");String workSheetName = "pro_info.xls";response.setHeader("Content-disposition", "attachment; filename="+workSheetName);//WriteExcel we=new WriteExcel();//System.out.println("文件生成");//we.getExcel("steet1",response.getOutputStream());HSSFWorkbook workbook = new HSSFWorkbook(); //产生工作簿对象HSSFSheet sheet = workbook.createSheet(); //产生工作表对象sheet.setDefaultRowHeight((short) 10);sheet.setDefaultColumnWidth((short) 20);sheet.setColumnWidth((short) 4, (short) 10000);// 单位workbook.setSheetName(0,"firstSheet");// 设置字体HSSFFont font = workbook.createFont();// font.setFontHeightInPoints(( short ) 20 ); // 字体高度// font.setColor(HSSFFont.COLOR_RED); // 字体颜色font.setFontName( " 黑体" ); // 字体font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 宽度// font.setItalic( true ); // 是否使用斜体// font.setStrikeout(true); // 是否使用划线// 设置单元格类型HSSFCellStyle cellStyle = workbook.createCellStyle();cellStyle.setFont(font);cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 水平布局:居左边cellStyle.setWrapText( true );HSSFRow row = sheet.createRow((short)0);//产生第一行HSSFCell cell = row.createCell((short) 0);//产生第一个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("本公司项目统计信息");row = sheet.createRow((short) 1);//产生第二行cell = row.createCell((short) 0);//产生第一个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("序号");cell = row.createCell((short) 1);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("姓名");cell = row.createCell((short) 2);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("项目名称");cell = row.createCell((short) 3);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("项目类型");cell = row.createCell((short) 4);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("项目规模");cell = row.createCell((short) 5);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue("担任项目职务");cell = row.createCell((short) 6);//产生第二个单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("设计时间");cell = row.createCell((short) 7);//产生第二个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("设计阶段");cell = row.createCell((short) 8);//产生第二个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("项目建设单位");cell = row.createCell((short) 9);//产生第二个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("竣工时间");cell = row.createCell((short) 10);//产生第二个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("专项设计");cell = row.createCell((short) 11);//产生第二个单元格 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("直属专业领导");Table tb = new Table();Vector vc = null;Hashtable rows=new Hashtable();String sql = "";sql = "select * from hy_pro_briefinfo where 1=1"; sql = sql + " order by participants";vc = tb.getContent(sql);// System.out.println(sql);// String result = "";int order=0;String contracId = "";String projectname = "";String projectscale = "";String projecttype="";String projectconunit="";double designtime = 0;String designphase = "";double completedtime = 0;String participants = "";String positionofpro = "";String dutiesas = "";String leader="";int iRow=2;String info="";String pername="";int num=1;for(int i=0;i<vc.size();i++){rows = (Hashtable)vc.get(i);order=i+1;participants=(String)rows.get("participants");if(!pername.equals(participants)){pername=participants;num=1;}else{num++;}// System.out.println("participants="+participants);projectname=(String)rows.get("projectname");projecttype=(String)rows.get("projecttype");// System.out.println("projectname="+projectname);positionofpro=(String)rows.get("positionofpro");// System.out.println("positionofpro="+positionofpro);designtime=((Integer)rows.get("designtime")).intValue();projectscale=(Double)rows.get("projectscale")+"";// System.out.println("designtime="+designtime);designphase=(String)rows.get("designphase");// System.out.println("designphase="+designphase);projectconunit=(String)rows.get("projectconunit");// System.out.println("projectconunit="+projectconunit);completedtime=((Integer)rows.get("completedtime")).intValue(); // System.out.println("completedtime="+completedtime);dutiesas=(String)rows.get("dutiesas");// System.out.println("dutiesas="+dutiesas);row= sheet.createRow((short)iRow);;for(int j=1;j<=11;j++){cell = row.createCell((short)(j-1));cell.setCellStyle(cellStyle); // 设置单元格样式cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);switch(j-1){case 0: //编号info=num+"";break;case 1: //姓名info=participants+"";break;case 2: //项目名称info=projectname+"";break;case 3: //项目类型info=projecttype+"";break;case 4: //面积info="建筑面积:"+projectscale+"平方米";break;case 5: //担任项目职务info=positionofpro+"";break;case 6: //设计时间info=designtime+"";info=info.substring(0,info.indexOf("."));break;case 7: //设计阶段info=designphase+"";break;case 8: //施工单位info=projectconunit+"";break;case 9: //竣工时间info=completedtime+"";info=info.substring(0,info.indexOf("."));if("0".equals(info)){info="";}break;case 10: //专项设计info=dutiesas+"";break; //直属专业领导case 11:info=leader+"";break;}//System.out.println("info="+info);cell.setCellValue(info);}iRow++;}OutputStream output=response.getOutputStream();output.flush();workbook.write(response.getOutputStream());output.close();%>。
JSP页面中导出Excel文件及其中文乱码的解决办法
JSP页面中导出Exc el文件及其中文乱码的解决办法Web应用导出Ex cel报表的简单实现(HTML)在Web应用中,很多数据经常要导出成Exc el文档。
用专门的生成真正的E xcel文档的方式比较复杂,不太好用。
所以经常用一种简单的方式来实现,即将报表保存为HTM L格式,然后用Exc el打开。
实现方式:第一步,用JSP实现HTM L版本的报表第二步,在该JS P页面头部设置res ponse的Cont entTy pe为Ex cel格式<%respo nse.s etCon tentT ype("appli catio n/vnd.ms-e xcel;chars et=GB K");%>中文问题:查看源代码时发现J SP文件中写死的中文为乱码,则在JSP文件头部添加一行<%@ pag e con tentT ype="text/html; char set=g b2312" %>查看源代码时发现文字为中文,但是用Exc el打开为乱码则在<html>与<hea d>中加入<met a htt p-equ iv="C onten t-Typ e" co ntent="tex t/htm l; ch arset=GBK">用S ervle t实现也是类似的处理方法。
实现样例:Test.jsp<%@ p age c onten tType="tex t/htm l; ch arset=GBK" %><% res ponse.setC onten tType("app licat ion/v nd.ms-exce l;cha rset=GBK"); %><HTML><me ta ht tp-eq uiv="Conte nt-Ty pe" c onten t="te xt/ht ml; c harse t=GBK"><h ead><title>Test</tit le></head><bod y><T ABLEborde rColo r=#111111cellS pacin g=0 c ellPa dding=2 wi dth=1200 a lign=cente r bor der=1><TR><TD alig n=mid dle w idth="10%" heig ht=20 rowS pan=2>项目</TD><TD a lign=middl e wid th="2%" he ight=20 ro wSpan=2>计量单位 </TD><TD al ign=m iddle widt h="4%" hei ght=20>满期赔付率 </TD></TR></TAB LE></body></H TML>Web应用导出Exc el报表的简单实现(HTML)在Web应用中,很多数据经常要导出成E xcel文档。
jsp实现文件上传和下载
1 JSP文件上传简单实例1、index.html代码:<html><head><title>上传图片</title></head><body><form action="do_upload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="Photo"><input type="submit" value="上传"></form></body></html>2、使用到的函数和类说明File类文件和目录路径名的抽象表示形式,File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。
read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。
read() 从此输入流中读取一个数据字节。
write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。
write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。
JSP下载文件源代码
1、下载链接页面download.html
页面源码如下:
<!--
文件名:download.html
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
m_contentDisposition + " filename=" +
toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
if(s1.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
<title>下载</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<a href="jsp/do_download.jsp">点击下载</a>
Jsp页面实现文件上传下载
Jsp页面实现文件上传下载第1 页jsp页面实现文件上传代码开发的过程见用TOMCAT作简单的jsp web开发名称:jsp页面上传类作者:SinNeRMail:vogoals[at]特点:1可以多文件上传;2返回上传后的文件名;3form表单中的其他参数也可以得到。
先贴上传类,JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;/** vogoalAPI 1.0*************************** by *mail:********************//*** JSP上传文件类** @author SinNeR* @version 1.0*/public class JspFileUpload {/** request对象*/private HttpServletRequest request = null;/** 上传文件的路径*/private String uploadPath = null;/** 每次读取得字节的大小*/private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。
下载txt
不好意思,最近工作忙,没上来看贴.我在这把代码给大家下:Java代码1.<meta http-equiv="Content-Type" content="text/html; charset=gbk">2.<HTML>3.<HEAD>4.5.</HEAD>6.7.<BODY>8.<a href = "download1.jsp?filepath=d:\\&filename=1a.txt" >downloadtest1</a>9.10.</BODY>11.</HTML>这是页面上的连接,我传了个路径和文件名Java代码1.<%2.String filename = request.getParameter("filename");//"1a.txt";3.String filepath = request.getParameter("filepath");//"d:\\";4.int i = 0;5.response.setContentType("application/octet-stream");6.response.setHeader("Content-Disposition","attachment;filename = "+filename);7.java.io.FileInputStream fileInputStream = new java.io.FileInputStream(filepath+filename);8.while((i= fileInputStream.read()) != -1){9.out.write(i);10. }11.%>这是被调用的download1.jsp,这个jsp就是执行直接下载文件的不管是txt还是word文档都可以直接下载这个东东是我在一个专业编程杂志的网站花3块钱买的,嘿嘿.没办法,项目急用,今天上来看到有人需要赶紧发出来,希望3,4楼还能看到.out.clear();out = pageContext.pushBody();<%@page language="java" import=".*" pageEncoding="gb2312"%> <%response.setContentType("application/x-download");//设置为下载application/x-downloadString filenamedownload = "/shushan.txt";//即将下载的文件的相对路径String filenamedisplay = "shushan.txt";//下载文件时显示的文件保存名称 filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);try{RequestDispatcher dispatcher =application.getRequestDispatcher(filenamedownload);if(dispatcher != null){dispatcher.forward(request,response);}response.flushBuffer();}catch(Exception e){e.printStackTrace();}finally{out.clear();out = pageContext.pushBody();}%><%@page language="java" contentType="application/x-msdownload" import="java.io.*,.*" pageEncoding="UTF-8"%><%String txt ="实验";System.out.println(txt);response.setContentType("application/txt");response.setHeader("Content-disposition","attachment;filename=table.txt");BufferedOutputStream bos = null;try {bos = new BufferedOutputStream(response.getOutputStream()); bos.write(txt.getBytes());} catch (IOException e) {throw e;} finally {if (bos != null)bos.close();out.clear();out = pageContext.pushBody();}%><%@page language="java" contentType="application/x-msdownload"import="java.io.*,.*" pageEncoding="gb2312"%><%response.reset();//可以加也可以不加response.setContentType("application/x-download");String filenamedownload = "D:\\shushan.txt";String filenamedisplay = "shushan.txt";//系统解决方案.txtfilenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);OutputStream output = null;FileInputStream fis = null;try{output = response.getOutputStream();fis = new FileInputStream(filenamedownload);byte[] b = new byte[1024];int i = 0;while((i = fis.read(b)) > 0){output.write(b, 0, i);}output.flush();}catch(Exception e){System.out.println("Error!");e.printStackTrace();}finally{if(fis != null){fis.close();fis = null;}if(output != null){output.close();output = null;}out.clear();out = pageContext.pushBody();}%>。
JS操作EXCEL大全
JS操作EXCEL大全一、读取Excel文件读取Excel文件是进行Excel操作的基础。
在JavaScript中,我们可以使用一些库来读取Excel文件,例如xlsx、xlsjs和exceljs等。
1. 使用xlsx库读取Excel文件xlsx是一个用于处理Excel文件的JavaScript库。
您可以通过以下步骤使用xlsx库来读取Excel文件:首先,将xlsx库导入到您的项目中。
您可以使用npm来安装xlsx库,并在代码中引入该库:```npm install xlsxconst XLSX = require('xlsx');```然后,使用XLSX.readFile方法读取Excel文件:```const workbook = XLSX.readFile('example.xlsx');```最后,可以通过workbook.Sheets对象获取Excel文件的内容:```const worksheet = workbook.Sheets['Sheet1'];console.log(XLSX.utils.sheet_to_json(worksheet));```2. 使用xlsjs库读取Excel文件xlsjs是另一个用于读取Excel文件的JavaScript库。
您可以使用以下步骤使用xlsjs库来读取Excel文件:首先,将xlsjs库导入到您的项目中。
您可以使用npm来安装xlsjs 库,并在代码中引入该库:```npm install xlsjsconst XLSX = require('xlsjs');```然后,使用XLSX.readFile方法读取Excel文件:```const workbook = XLSX.readFile('example.xls');```最后,可以通过workbook.Sheets对象获取Excel文件的内容:```const worksheet = workbook.Sheets['Sheet1'];console.log(XLSX.utils.sheet_to_json(worksheet));```二、写入Excel文件在读取Excel文件之后,我们还可以使用JavaScript来写入Excel 文件。
jsp实现下载excel,word,pdf,jgp,gif,xml,js过滤器实现文档
下面代码有选择的粘贴进自己项目即可,其实现解决了tomcat、resin服务器中文下载乱码问题。
web.xml配置如下<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><filter><filter-name>downLoad</filter-name><filter-class>com.tangdi.DownLoadFilter</filter-class></filter><filter-mapping><filter-name>downLoad</filter-name><url-pattern>*.downLoad</url-pattern></filter-mapping></web-app>Jsp页面配置如下其下载利用a标签进行连接,前提是服务器上下载文件路径已知需要引进el表达式和jquery.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@ taglib uri="/jsp/jstl/core" prefix="c"%><script src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js" type="text/javascript"></script><html><head><script>$(function(){var$href='${pageContext.request.contextPath}'+"/20159.downLoad?filePath=";//+encodeURICompo nent("中国.downLoad");$("#testHref").children("td").each(function(){var $id=$(this).children(":first").attr("id");var $tmpHref="";if($id=="txt"){$tmpHref=$href+"E:/apache-tomcat-6.0.35/apache-tomcat-6.0.35/webapps/MyTry/test/"+"203123 4_这是txt.txt";}else if($id=="pdf"){$tmpHref=$href+"E:/apache-tomcat-6.0.35/apache-tomcat-6.0.35/webapps/MyTry/test/"+"这是pdf.pdf";}else if($id=="excel"){$tmpHref=$href+"这是excel.xls";}else if($id=="word"){$tmpHref=encodeURI($href+"这是doc.doc","ISO8859-1");}else if($id=="jpg"){$tmpHref=$href+"这是jpg.jpg";}else if($id=="js"){$tmpHref=$href+"这是js.js";}else if($id=="jsp"){$tmpHref=$href+"这是jsp.jsp";}else if($id=="html"){$tmpHref=$href+"这是html.html";}$(this).children(":first").attr("href",$tmpHref);});});</script></head><body><div><table><tr id="testHref"><td><a id="txt" href="#">txt</a></td><td><a id="pdf" href="#">pdf</a></td><td><a id="excel" href="#">excel</a></td><td><a id="word" href="#">word</a></td><td><a id="xml" href="#">xml</a></td><td><a id="jpg" href="#">jpg</a></td><td><a id="gif" href="#">gif</a></td><td><a id="js" href="#">js</a></td><td><a id="jsp" href="#">jsp</a></td><td><a id="html" href="#">html</a></td></tr></table></div></body></html>过滤器filter配置如下package com.tangdi;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import .URLDecoder;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DownLoadFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest request1, ServletResponse response1,FilterChain arg2) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) request1;HttpServletResponse response = (HttpServletResponse) response1;//request.setCharacterEncoding("UTF-8");//String filePath = new String(request.getParameter("filePath").getBytes("ISO8859-1"), "UTF-8");request.setCharacterEncoding("ISO8859-1");String filePath = new String(request.getParameter("filePath").getBytes("ISO8859-1"),"UTF-8");System.out.println("*****************************************************filePat h is :" + filePath);String suffix = filePath.substring(stIndexOf(".") + 1);System.out.println("********************suffix is:"+suffix);String contentType = getContentType(suffix);//获得尾缀设置不同contentTypeString contentDisposition = "attachment; filename="+new String(filePath.substring(stIndexOf("_")+1));System.out.println("********************************************"+contentDisposit ion);response.setCharacterEncoding("ISO8859-1");response.setContentType(contentType);response.setHeader("Content-disposition", new String(contentDisposition.getBytes("UTF-8"),"ISO8859-1"));try {InputStream is = new FileInputStream(filePath);OutputStream os = response.getOutputStream();int byteRead;byte[] buffer = new byte[1024];while ((byteRead = is.read(buffer)) != -1) {os.write(buffer, 0, byteRead);}os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}/**** @param suffix 下载文件尾缀* @return 返回不同response.contentType*/public String getContentType(String suffix) {if (suffix.equals("txt")) {return "text/plain";} else if(suffix.equals("doc") || suffix.equals("docx")) {return "application/msword;charset=gb2312";} else if(suffix.equals("xls") || suffix.equals("xlsx")) {return "application/-excel";} else if(suffix.equals("pdf")) {return "application/pdf";}else if(suffix.equals("gif")){return "image/gif" ;}else if(suffix.equals("jpg")){return "image/jpeg" ;}else if(suffix.equals("htm")||suffix.equals("html")||suffix.equals("jsp")){return "text/html" ;}else if(suffix.equals("xml")){return "text/xml" ;}else if(suffix.equals("js")){return "application/x-javascript" ;}return "application/octet-stream";}public void init(FilterConfig config) throws ServletException {}}注:其中编码ISO8859-1不能乱改,否则出现解析路径错误或者下载文件出错。
前端调用后端接口下载excel文件的几种方式
前端调⽤后端接⼝下载excel⽂件的⼏种⽅式 今天有⼀个导出相应数据为excel表的需求。
后端的接⼝返回⼀个数据流,⼀开始我⽤axios(ajax类库)调⽤接⼝,返回成功状态200,但是!但是浏览器没有⾃动下载excel表,当时觉得可能是ajax的安全性问题导致⽆法下载。
下⾯列觉两种我测试成功的⽅式: 1.window.location.href = '接⼝地址' 含义:当前页⾯打开URL页⾯. 和在浏览器输⼊接⼝地址⼀样,可以下载excel⽂件.但是缺点是⽆法执⾏POST请求 2.利⽤隐藏表单解决(我这⾥假设加⼊了JQuery库):var exportData = [{'list1':'xiaodo1'},{'list2':'xiaodo2'}] //模拟后台需要接收的参数let form = $("<form>"); //创建form标签form.attr("style","display:none");from.attr("method","post");//设置请求⽅式form.attr("action","接⼝地址"); //action属性设置请求路径$("body").append(form); //页⾯添加form标签let input1 = $("<input>") //创建input标签input1.attr("type","hidden") //设置隐藏域input1.attr("name","data") //设置发送后台数据的参数名input1.attr("value",JSON.Stringify(exportData));form.submit();//表单提交即可下载!上⾯就是我测试成功的两种⽅法.后⾯我去百度了⼀下axios如何导出excel⽂件,发现也是可以的.谢谢!。
详解Springboot下载Excel的三种方式
详解Springboot下载Excel的三种⽅式汇总⼀下浏览器下载和代码本地下载实现的3种⽅式。
(其实⼀般都是在代码⽣成excel,然后上传到oss,然后传链接给前台,但是我好像没有实现过直接点击就能在浏览器下载的功能,所以这次⼀起汇总⼀下3种实现⽅式。
) 1.EasyExcel--浏览器下载1.Maven环境⽹络上有很多maven的easyexcel版本,还是推荐alibaba的easyexcel,操作简单,代码不冗余<!-- https:///artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version></dependency>2.完整代码实现控制层:设置response格式然后直接下载即可package com.empirefree.springboot.controller;import com.alibaba.excel.EasyExcel;import er;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;/*** @program: springboot* @description:* @author: huyuqiao* @create: 2021/07/04 15:01*/@RestControllerpublic class UserController {/*** Author: HuYuQiao* Description: 浏览器下载--excel*/@GetMapping("/testRespExcel")public void testRespExcel(HttpServletResponse response){response.addHeader("Content-Disposition", "attachment;filename=" + "huyuqiao.xlsx");response.setContentType("application/vnd.ms-excel;charset=gb2312");try {// 从HttpServletResponse中获取OutputStream输出流ServletOutputStream outputStream = response.getOutputStream();/** EasyExcel 有多个不同的read⽅法,适⽤于多种需求* 这⾥调⽤EasyExcel中通过OutputStream流⽅式输出Excel的write⽅法* 它会返回⼀个ExcelWriterBuilder类型的返回值* ExcelWriterBuilde中有⼀个doWrite⽅法,会输出数据到设置的Sheet中*/EasyExcel.write(outputStream, User.class).sheet("测试数据").doWrite(getAllUser());} catch (IOException e) {e.printStackTrace();}}public List<User> getAllUser(){List<User> userList = new ArrayList<>();for (int i=0;i<100;i++){User user = User.builder().name("胡宇乔"+ i).password("huyuqiao").age(i).build();userList.add(user);}return userList;}}实体类:给User设置对应的excel属性即可,value代表excel中名字,index代表第⼏列package com.empirefree.springboot.pojo;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.metadata.BaseRowModel;import lombok.Builder;import lombok.Data;/*** @program: springboot* @description: user* @author: huyuqiao* @create: 2021/07/04 14:53*/@Data@Builderpublic class User extends BaseRowModel{@ExcelProperty(value = "姓名",index = 0)private String name;@ExcelProperty(value = "密码",index = 1)private String password;@ExcelProperty(value = "年龄",index = 2)private Integer age;}3.实现效果2.EasyExcel--本地下载1.完整代码实现m aven和上⾯⼀样,只是⽂件输出流设置⼀下即可package com.empirefree.springboot.controller;import com.alibaba.excel.EasyExcel;import er;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;/*** @program: springboot* @description:* @author: huyuqiao* @create: 2021/07/04 15:01*/@RestControllerpublic class UserController {/*** Author: HuYuQiao* Description:本地⽣成--excel*/@GetMapping("/testLocalExcel")public void testLocalExcel(){// ⽂件输出位置OutputStream out = null;try {out = new FileOutputStream("C:\\Users\\EDY\\Desktop\\empirefree.xlsx"); EasyExcel.write(out, User.class).sheet("测试数据").doWrite(getAllUser()); } catch (FileNotFoundException e) {e.printStackTrace();}finally {try {// 关闭流out.close();} catch (IOException e) {e.printStackTrace();}}}public List<User> getAllUser(){List<User> userList = new ArrayList<>();for (int i=0;i<100;i++){User user = User.builder().name("张三"+ i).password("1234").age(i).build(); userList.add(user);}return userList;}}2.实现效果3.Poi--浏览器实现下载1.Maven环境<!-- excel导出⼯具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>RELEASE</version></dependency>2.代码实现控制层/*** Author: HuYuQiao* Description: excle-export*/@GetMapping("/export")public String exportExcel(HttpServletResponse response) {System.out.println("成功到达到处excel....");String fileName = "test.xls";if (fileName == null || "".equals(fileName)) {return "⽂件名不能为空!";} else {if (fileName.endsWith("xls")) {Boolean isOk = excelService.exportExcel(response, fileName, 1, 10);if (isOk) {return "导出成功!";} else {return "导出失败!";}}return "⽂件格式有误!";}}serviceimpl层/*** Author: HuYuQiao* Description: excel-impl*/@Overridepublic Boolean exportExcel(HttpServletResponse response, String fileName, Integer pageNum, Integer pageSize) { ("导出数据开始。
前端解析二进制流实现文件下载和文件预览(预览只支持excel、图片、pdf、txt文本)
前端解析⼆进制流实现⽂件下载和⽂件预览(预览只⽀持excel、图⽚、pdf、txt⽂本)很多时候需要纯前端解析后台返回的⼆进制流进⾏⽂件的下载和预览,此处主要是使⽤了xlsx.js⽂件和css⽂件,可⾃⾏在⽹上下载实现下载:filedxz(path_, type_) {//附件下载let that = this;axios({method: 'get',url:url,headers: {"auth": auth,},responseType: 'blob',//请求的关键,必须加上,负责⽆法成功(重中之重)}).then(response => {type_ = type_.toLowerCase();//转⼩写统⼀if (type_ == ".docx") {that._type_ = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"} else if (type_ == ".doc") {that._type_ = "application/msword"} else if (type_ == ".gif") {that._type_ = "image/gif"} else if (type_ == ".jpeg" || type_ == ".jpg") {that._type_ = "image/jpeg"} else if (type_ == ".png") {that._type_ = "image/png"} else if (type_ == ".pdf") {that._type_ = "application/pdf"} else if (type_ == ".txt") {that._type_ = "text/plain"} else if (type_ == ".xls") {that._type_ = "application/vnd.ms-excel"} else if (type_ == ".xlsx") {that._type_ = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"} else if (type_ == ".xlsx") {that._type_ = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"} else if (type_ == ".zip") {that._type_ = "application/zip"} else if (type_ == ".ppt") {that._type_ = "application/vnd.ms-powerpoint"} else if (type_ == ".pptx") {that._type_ = "application/vnd.openxmlformats-officedocument.presentationml.presentation"} else if (type_ == ".zip") {that._type_ = "application/zip"}var blob = new Blob([response.data], { type: that._type_ })//第⼀个参数为数据var downloadElement = document.createElement('a');var href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = path_; //下载后⽂件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象}).catch(function (err) {console.log(err);});},⽂件预览:filedyl(path, type_, name_) {debugger;let that = this;axios({method: 'get',url:url,headers: {"auth": auth,},responseType: 'blob',//同样是重点}).then(response => {type_ = type_.toLowerCase();if (type_ == ".docx") {that._type_ = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"} else if (type_ == ".doc") {that._type_ = "application/msword"} else if (type_ == ".gif") {that._type_ = "image/gif"} else if (type_ == ".jpeg" || type_ == ".jpg") {that._type_ = "image/jpeg"} else if (type_ == ".png") {that._type_ = "image/png"} else if (type_ == ".pdf") {that._type_ = "application/pdf"} else if (type_ == ".txt") {that._type_ = "text/plain;charset=utf-8'"} else if (type_ == ".xls") {that._type_ = "application/vnd.ms-excel"} else if (type_ == ".xlsx") {that._type_ = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}else if (type_ == ".zip") {that._type_ = "application/zip"} else if (type_ == ".ppt") {that._type_ = "application/vnd.ms-powerpoint"} else if (type_ == ".pptx") {that._type_ = "application/vnd.openxmlformats-officedocument.presentationml.presentation"}if (type_ == ".xlsx" || type_==".xls") {$("#excelz").empty();//excel需要在预览的地⽅⾃⼰加dom展⽰预览let name = name_.split(".")[0];//预览⽂件的名字可以⾃⾏定义var nContainer = document.getElementById('excelz');var blob = new Blob([response.data], { type: that._type_ })var href = window.URL.createObjectURL(blob); //创建下载的链接var xlsx = new Plus.Xlsx(nContainer);xlsx.readFile(href);$("#excelz").prepend('<table id="table-preview" class="table table-striped table-hover"><thead style="width: 30%;"><tr><th>' + name + '</th></tr></thead></table>');setTimeout(function () {//去掉空⾏// $("#excelz tr:gt(10)").each(function () {// var _hide = true;// $(this).find("td").each(function () {// if ($(this).text().trim() != '') {// _hide = false;// }// });// if (_hide) {// $(this).hide();// }// });//td为0时不显⽰$("#excelz tr td").each(function () {if ($(this).text() == '0' || $(this).text() == '0.00' || $(this).text() == 0 || $(this).text() == 0.00) {$(this).text("");}});//去除表4最后⼀列空列var _col_hide = true;var len = $("table tr").length;for (var i = 0; i < len; i++) {if ($("#excelz tr").eq(i).find("td:last").text().trim() != '') {_col_hide = false;}}if (_col_hide) {for (var i = 0; i < len; i++) {$("#excelz tr").eq(i).find("td:last").remove();}}$("#table-div, #close-table").show();}, 500);} else {var blob = new Blob([response.data], { type: that._type_ })var href = window.URL.createObjectURL(blob); //创建下载的链接window.open(href);}}).catch(function (err) {console.log(err);});},从上⾯可以看出,实际上下载和预览代码基本⼀样,所以可以通过⼀次请求来实现下载的同时并且提醒对⽅预览,预览⽂件要注意图⽚、txt、pdf都是重新打开页⾯实现预览,excel是⾃⼰创建dom存放预览信息,⽆法实现⼀个excel⽂件中有多个sheet⽂件的预览,只能出现⼀个。
js通过URL下载文件
js通过URL下载⽂件页⾯上⼀个button,点击之后触发⼀个function去请求数据,返回 pdf/epub 的URL,然后下载这个⽂件.本来是直接⽤ a 写的,href⾥放资源地址,target设为'_blank'效果良好.但这样所有的资源都会直接暴露⽽且不⽅便统计,所以就换⽤上⾯的⽅式.1. js构造a标签,js触发click.不加_blank是可以的,但会替换掉原来整个页⾯.加了_blank chrome就拦截,Safari⽆效果.2. ⽤iframe,src填⼊资源地址. 但这样Safari⽆效果. 且,如果是MP4/pdf这样的⽂件浏览器并没有下载⽽是直接打开.3. window.open 被拦截最想要的效果是点击下载按钮,原页⾯⽆改动⽆刷新,直接下载资源.移动版在新页⾯下载,触发下载⾃动关闭新页⾯.解决办法:两种⽅案:⼀ ,使⽤第⼀种⽅式,js构造a标签,js触发click.在a标签中加⼊download属性,(360安全浏览器兼容模式和IE浏览器可能还是会弹出空⽩页)jsp页⾯:1<div class="controls chzn-select fn-left">2<button class="button button-flat-primary button-rounded" type="button" id="export-self-static">导出3</button>4</div>56<a id="exportInfoForm" style="display: none;" download><li id="ex-li">公式管理</li></a>js页⾯:1 $('#export-static').unbind('click').bind('click',function(){2 exports.exportSelfStatistics();3 });45var url = contextPath+"statistics/self/detail/export?" + new Date().getTime()+param;6 $('#exportInfoForm').attr("href", Util.appEncodeURL(url));7 $('#ex-li').trigger("click");⼆,JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使⽤相应的ajax函数进⾏⽂件下载。
Javascript写入txt和读取txt文件示例
Javascript写⼊txt和读取txt⽂件⽰例1. 写⼊FileSystemObject可以将⽂件翻译成⽂件流。
第⼀步:例:代码如下:Var fso=new ActiveXObject(Scripting.FileSystemObject);创建⼀个可以将⽂件翻译成⽂件流的对象。
第⼆步:⽤于创建⼀个textStream 对象括号⾥边有三个属性1. ⽂件的绝对路径2. ⽂件的常数只读=1,只写=2 ,追加=8 等权限。
(ForReading 、 ForWriting 或 ForAppending 。
);3. ⼀个布尔值允许新建则为true 相反为false;例:代码如下:Var f=fso.createtextfile(“C:\a.txt”,2,true);第三步:调⽤textStream的⽅法1. Write(不在写⼊数据末尾添加新换⾏符)2. WriteLine(要在最后添加⼀个新换⾏符)3. WriteBlankLines(增加⼀个或者多个空⾏)例:代码如下:f.writeLine(“wo shi di yi hang”);第四步:关闭textStream 对象:例:f.close();2. 读取第⼀步:代码如下:Var fso=new ActiveXObject(Scripting.FileSystemObject);创建⼀个可以将⽂件翻译成⽂件流的对象。
第⼆步:⽤于创建⼀个textStream 对象括号⾥边有三个属性4. ⽂件的绝对路径5. ⽂件的常数只读=1,只写=2 ,追加=8 等权限。
(ForReading 、 ForWriting 或 ForAppending 。
);6. ⼀个布尔值允许新建则为true 相反为false;例:代码如下:Var f=fso.opentextfile(“C:\a.txt”,1,true);第三步:调⽤读取⽅法1. Read(⽤于读取⽂件中指定数量的字符)2. ReadLine(读取⼀整⾏,但不包括换⾏符)3. ReadAll(则读取⽂本⽂件的整个内容);判断是否读取到最后⼀⾏代码如下:while (!f.AtEndOfStream){f.Readline();}第四步:关闭textStream 对象:例:f.close();下⾯是⼀个html打开txt⽂件的例⼦。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP下载txt 和Excel两种文件
1下载txt文件
这个花了我不少时间原因是用ie下载txt文件时是在页面中直接打开了文件.虽然查了一些资料,也看了别人的解决方案,可还是解决不了问题,最后发现是一个字母惹的祸:少写一个字母嘿嘿够马虎!!!
代码如下:
OutputStream o=response.getOutputStream();
byte b[]=new byte[500];
File fileLoad=new File("e:/test.txt");
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment; filename=text.txt");
long fileLength=fileLoad.length();
String length1=String.valueOf(fileLength); response.setHeader("Content_Length",length1); FileInputStream in=new FileInputStream(fileLoad); int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
in.close();
out.clear();
out = pageContext.pushBody();
2 下载excel文件
跟下载txt文件时的唯一区别是ContentType值的设置不同:
OutputStream o=response.getOutputStream();
byte b[]=new byte[500];
File fileLoad=new File("e:/text.xls");
response.reset();
response.setContentType("application/vnd.ms-excel"); response.setHeader("content-disposition","attachment; filename=text.xls");
long fileLength=fileLoad.length();
String length1=String.valueOf(fileLength);
response.setHeader("Content_Length",length1); FileInputStream in=new FileInputStream(fileLoad); int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
in.close();
out.clear();
out = pageContext.pushBody();
这两个本来是放在一起的,因为我的页面中需要判断是下载的txt文件还是xls文件在这里给分开了需要注意的是,最后两句一定要加上,否则会出现getOutputStream()错误的!!!!
实例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+r equest.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<script type="text/javascript">
function download(filename){
var url =
encodeURI("down2.jsp?filename="+filename);
window.location.href= url;
}
</script>
</head><body>
普通测试:
<a href="javascript:void(0)"
onclick="download('a.txt');">Down a.txt</a>
中文文件名测试:
<a href="javascript:void(0)" onclick="download('中
文.txt');">Down 中文.txt</a>
普通转向:
<a href="a.txt">down.txt</a>
</body>
</html>
down2.jsp:
<%@ page language="java" import="java.util.*,java.io.* "
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String filename = request.getParameter("filename");
filename = new
String(filename.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(filename);
OutputStream o=response.getOutputStream(); byte b[]=new byte[500];
/** * 得到文件的当前路径* @param args */
String serverpath=request.getRealPath("\\");
File fileLoad=new File(serverpath+filename);
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment; filename="+filename);
long fileLength=fileLoad.length();
String length1=String.valueOf(fileLength); response.setHeader("Content_Length",length1); FileInputStream in=new FileInputStream(fileLoad);
int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
in.close();
out.clear();
out = pageContext.pushBody(); %>。