JAVA文件下载源代码
java后台实现excel文件下载功能
java后台实现excel⽂件下载功能 java中对于excel⽂件的操作,有读取,写⼊,上传等功能,在对excel⽂件进⾏操作时,为了让使⽤者更加直观的制作excel数据,必然会有下载模板excel⽂件功能,这⾥以学⽣基本信息模板excel⽂件为例,实现对指定路径下的excel⽂件进⾏下载的后台代码。
对excel⽂件的操作使⽤到poi接⼝,对于不同拓展名的excel⽂件调⽤不同的对象,maven导⼊jar包语句可以参考。
我们在这⾥操作的对象是.xlsx格式的excel⽂件。
代码如下:/*** 学⽣excel模板下载,可⽤于批量新建,修改学⽣对象,** @param response* @param request* @return*/@RequestMapping(value = "downLoadStuInfoExcel", produces = "text/html;charset=UTF-8")public void downLoadStuInfoExcel(HttpServletResponse response, HttpServletRequest request) {JSONObject rt = new JSONObject();//json对象,⽤来记录下载状态值,写⼊log中,也可以把状态值返回到前台,这⼀部分可有可⽆。
rt.put("status", "1");rt.put("message", "");rt.put("result", "");//学⽣新建excel下载模板保存地址从配置⽂件中读取String folderPath = ResourceBundle.getBundle("systemconfig").getString("stuExcelDownLoadPath") + File.separator + "stuTemplateExcel.xlsx";File excelFile = new File(folderPath);//判断模板⽂件是否存在if (!excelFile.exists() || !excelFile.isFile()) {rt.put("status", "0");rt.put("message", "模板⽂件不存在");// return rt.toJSONString();}//⽂件输⼊流FileInputStream fis = null;XSSFWorkbook wb = null;//使⽤XSSFWorkbook对象读取excel⽂件try {fis = new FileInputStream(excelFile);wb = new XSSFWorkbook(fis);fis.close();} catch (Exception e) {e.printStackTrace();rt.put("status", "0");rt.put("message", "模板⽂件读取失败");// return rt.toJSONString();}//设置contentType为vnd.ms-excelresponse.setContentType("application/vnd.ms-excel;charset=utf-8");response.setCharacterEncoding("utf-8");// 对⽂件名进⾏处理。
java实现文件上传、下载
tomcat上传文件下载文件首先介绍一下我们需要的环境:我用的是myeclipse8.5的java开发环境,tomcat是用的apache-tomcat-6.0.26这个版本。
首先先需要准备一下使用到的jar包这些jar包是struts2的jar包。
这些jar包是都是用于上传文件的。
注意:这里的jar包版本必须是对应的,如不是可能会tomcat下报错。
所以大家最好注意一下啊。
最好是用这套jar包。
我将会在csdn上将项目jar包发上去。
Jar下载地址(0分):/detail/woaixinxin123/4193113 源代码下载(10分):/detail/woaixinxin123/4193134开始搭建我们的项目。
创建web项目名字为File。
第一步:搭建struts2框架。
1、到jar包。
2、编辑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"><!-- 增加struts2的支持 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>3、添加struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts></struts>4、启动tomcat测试。
Java文件上传与文件下载实现方法详解
Java⽂件上传与⽂件下载实现⽅法详解本⽂实例讲述了Java⽂件上传与⽂件下载实现⽅法。
分享给⼤家供⼤家参考,具体如下:Java⽂件上传数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。
⽂件上传是数据上传的⼀种特例,指客户端向服务器上传⽂件。
即将保存在客户端的⽂件上传⼀个副本到服务器,并保存在服务器中。
1、上传表单要求⽂件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。
必须将<form/>标签的enctype属性值设为“multipart/form-data”,enctype表⽰encodingType,及编码类型由于客户端上传⽂件的⼤⼩是不确定的,所以http协议规定,⽂件上传的数据要存放于请求正⽂中,不能出现在URL地址栏内。
也就是说,想要上传⽂件必须提交POST请求。
表单中要有<input type="file" />标签注意:multipart/form-data请求与普通请求不同2、下载⽂件上传jar包并查看官⽅⽂档选择Commons中的FileUpload项⽬,并下载jar包和源⽂件查看FileUpload的⼯作⽅式查看FileUpload项⽬的API3、使⽤第三⽅jar包上传⽂件public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//第⼀步、判断请求是否为multipart请求if(!ServletFileUpload.isMultipartContent(request)) {throw new RuntimeException("当前请求只⽀持⽂件上传");}try {//第⼆步、创建FileItem⼯⼚DiskFileItemFactory factory = new DiskFileItemFactory();//设置临时⽂件存储⽬录String path = this.getServletContext().getRealPath("/Temp");File temp = new File(path);factory.setRepository(temp);//单位:字节。
Java实现文件下载并解决中文文件名乱码
response.reset();//如果有换行,对于文本文件没有什么问题,但是对于其它格
//式,比如AutoCAD、Word、Excel等文件下载下来的文件中就会多出一些换行符//0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。同//时response.reset()这种方式也能清空缓冲区, 防止页面中的空行等输出到下载内容里去
ServletOutputStream sos = response.getOutputStream();
FileInputStream fis = null;
File d = new File(filepath);
if (d.exists())
{
fis = new FileInputStream(filபைடு நூலகம்path);//
Java实现文件下载并解决中文文件名乱码
2010-08-12 【群组讨论】 【进入论坛】
关键词: Java;文件下载;中文文件名;文件名乱码 字体:大 中 小
“中华诵”经典诵读行动“感念师恩”短信赢礼品全国高校人才引进数据分析报告职场办公软件技能提升用Excel函数查找重复项
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
基于Java文件输入输出流实现文件上传下载功能
基于Java⽂件输⼊输出流实现⽂件上传下载功能本⽂为⼤家分享了Java实现⽂件上传下载功能的具体代码,供⼤家参考,具体内容如下前端通过form表单的enctype属性,将数据传递⽅式修改为⼆进制”流“的形式,服务端(servlet)通过 getInputStream() 获取流信息,运⽤java I/O 流的基础操作将流写⼊到⼀个服务端临时创建的⽂件temp中,然后再次利⽤⽂件基本操作,读取并截取临时⽂件内容,根据其中信息创建相应的⽂件,将读取出来的具体信息写⼊,下载时,根据提交的⽂件名称,找到服务器端相应的⽂件,然后根据输出流outStream输出到页⾯,同时将servlet的响应类型和响应头进⾏设置。
具体传输流程如下图:流信息的部分为:具体代码如下:前端代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script src="Js/jquery.js"></script></head><body><form action="FileUpServlet" method="post" enctype="multipart/form-data"><table><tr><td>请选择上传⽂件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td><td><input type="submit" value="上传"></td></tr><tr><td>${info}</td></tr></table></form>⽂件下载:<a href="FileLoadownServlet?filename=${filename}">${filename}</a></body></html>上传servlet部分(核⼼)@WebServlet("/FileUpServlet")public class FileUpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileUpServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");InputStream filesource = request.getInputStream();//request获取流信息String tempname = "D:/temp";//tempfile代表临时存放⽂件File tempfile = new File(tempname);//创建临时⽂件FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile⽬录下byte b[] = new byte[1024];int n;while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直⾄读完{outputStream.write(b,0,n);}outputStream.close();filesource.close();//关闭输⼊输出流/*以下为具体的⽂件操作,主要为解析临时产⽣的 temp⽂件,知识多为java输⼊输出流的内容!*/RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时⽂件,只读randomfile.readLine();//读取第⼀⾏,⽆效数据,不需要String str = randomfile.readLine();//读取第⼆⾏int beginIndex = stIndexOf("=")+2;//指定所需数据的开始位置int endIndex = stIndexOf("\"");//指定所需数据截⾄位置String filename = str.substring(beginIndex,endIndex);//截取⽂件名//重新定位⽂件指针,获取⽂件内容randomfile.seek(0);//⽂件指针从头开始long startext = 0;int i = 1;//⽂件内容开始位置while((n=randomfile.readByte()) != -1&&i <= 4){if(n=='\n'){startext = randomfile.getFilePointer();i++;}}startext = randomfile.getFilePointer() - 1;//获取⽂件内容结束位置randomfile.seek(randomfile.length());long endtext = randomfile.getFilePointer();int j = 1;while(endtext >= 0 && j <= 2){endtext--;randomfile.seek(endtext);if(randomfile.readByte()=='\n'){j++;}}endtext = endtext-1;//将临时⽂件保存⾄指定⽬录中String realpath = getServletContext().getRealPath("/")+"images";//设置⽂件保存⽬录System.out.println(realpath);File fileupload = new File(realpath);if(!fileupload.exists()){fileupload.mkdir();//⽬录不存在则创建}File savefile = new File(realpath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");randomfile.seek(startext);while(startext<endtext){randomAccessFile.write(randomfile.readByte());//⽂件写⼊startext = randomfile.getFilePointer();}//关闭各种输⼊输出流randomAccessFile.close();randomfile.close();tempfile.delete();//删除临时⽂件SimpleDateFormat timed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date nowdate = new Date();String time = timed.format(nowdate.getTime());request.setAttribute("info", time+" "+filename+"上传成功!");request.setAttribute("filename", filename);request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}下载部分protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubString filename = request.getParameter("filename");String path = getServletContext().getRealPath("/")+"images/";File file = new File(path+filename);//找到⽂件if(file.exists())response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开 InputStream inputStream = new FileInputStream(file);ServletOutputStream outputStream = response.getOutputStream();byte b[] = new byte[1024];int n;while((n = inputStream.read(b)) != -1){outputStream.write(b,0,n);}outputStream.close();inputStream.close();}else{request.setAttribute("result", "⽂件不存在!下载失败!");request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java实现文件上传和下载
java实现⽂件上传和下载本⽂实例为⼤家分享了java实现⽂件上传和下载的具体代码,供⼤家参考,具体内容如下⽂件的上传upload:⽂件上传客户端通过表单的⽂件域file 把客户端的⽂件上传保存到服务器的硬盘上页⾯⾸先对上传的表单有以下要求:必须有⽂件域:input type=file表单提交⽅式:method=post表单的 enctype=multipart/form-data<form method="post" action="/user/regist" enctype="multipart/form-data"><table style="border: chartreuse;solid:2px"><tr><th>⽤户名</th><td><input type="text" name="username"></td></tr><tr><th>密码</th><td><input type="password" name="password"></td></tr><tr><th>⽤户头像</th><td><input type="file" name="photo"> </td></tr><tr><td colspan="2"><input type="submit" value="提交"></td></tr></table></form>Servlet1)⾸先要导⼊以下两个jar包,通过commons-fileupload实现⽂件上传2)创建⼀个⼯⼚对象DiskFileItemFactory,在创建⼀个多部件表单解析器ServletFileUpload,构造⽅法传⼊⼯⼚对象3)解析器解析请求对象,获得⼀个list集合,其中list集合存储的是⼀个⼀个的fileItem对象,⼀个fileItem对应⼀个组件,也就是⼀个<input>4) 遍历集合⽤isFormField()⽅法判断是否为普通组件,然后着重处理⽂件域组件5)获取⽂件名,并⽤getRealPath⽅法获取服务器上传⽂件所在路径,创建新⽂件夹6)获取输⼊流和创建输出流,进⾏⽂件的读写@WebServlet(value = "/user/regist")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建⼀个⼯⼚对象DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个多部件解析器对象ServletFileUpload fileUpload = new ServletFileUpload(factory);User user = new User();FileOutputStream out=null;try {//⽤解析器对象解析请求,返回⼀个FileItem类型的集合List<FileItem> list = fileUpload.parseRequest(req);for (FileItem fileItem : list) {/*** fileItem.getFieldName());:::获取组件的name值* fileItem.getName());::::获取⽂件域的⽂件名* fileItem.getSize());::::获取数据的字节个数* fileItem.getString());::::获取数据的字符串* fileItem.isFormField());:::判断是否为普通组件*///判断部件是否为普通组件if (fileItem.isFormField()) {//普通组件//获取组件名字也就是name的值String fieldName = fileItem.getFieldName();//获取组件的值也就是value的值String value = fileItem.getString("utf-8");if ("username".equals(fieldName)) { //设置实体类的属性user.setUsername(value);} else if ("password".equals(fieldName)) {user.setPassword(value);}} else {// ⽂件域//获取⽂件名String fielName = fileItem.getName();//输⼊流来读数据InputStream in = fileItem.getInputStream();//设置⽂件写出的路径,并⽤随机码来保证图⽚可以重复String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);System.out.println("⽂件路径为:"+path);File file = new File(path);out = new FileOutputStream(file);//利⽤commons-io-1.4.jar的IOUtils的copy⽅法直接实现⽂件的复制IOUtils.copy(in,out);user.setPhoto(file.getName());}}} catch (Exception e) {e.printStackTrace();}finally {if(out!=null){out.close();}}req.getSession().setAttribute("user",user);req.getRequestDispatcher("/sucess.jsp").forward(req,resp);}}⽂件的下载页⾯只需⼀个超链接,传需要下载的⽂件名,或者直接输⼊路径在浏览器例: <a href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>Servlet1)接收参数,获取⽂件名2)获取imgs的路径,也就是存储⽂件的⽂件夹的路径,然后创建⽂件,传⼊该路径和⽂件名3)创建输⼊流读取⽂件4)设置响应头,⾸先根据⽂件名字获取⽂件的⼤类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定⽂件以附件形式保存到本地磁盘5)⽤响应获取输出流,读出⽂件到客户端@WebServlet("/user/download")public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//获取要下载的⽂件名String fileName = request.getParameter("fileName");System.out.println(fileName);//获取服务器中存储图⽚的⽂件夹的路径String path1 = request.getServletContext().getRealPath("/imgs");String path=path1+"/"+fileName;File file = new File(path);//创建输⼊流读⽂件FileInputStream in = new FileInputStream(file);//通过⽂件名字获取⽂件的⼤类型String type = request.getServletContext().getMimeType(fileName);//设置响应头ContentType指定响应内容的类型response.setHeader("Content-type",type);//设置响应头Content-Disposition 指定以附件形式保存响应的信息response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8"))); ServletOutputStream out = response.getOutputStream();//实现⽂件的读写IOUtils.copy(in,out);if(in!=null){in.close();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java 下载文件代码与配置
简单的文件下载,可以通过URL直接访问,主功能还是在servlet里实现比较好,在web.xml配置一下即可:package com.imeOM.action;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** 文件下载Servlet<br/>* request里面存储文件全路径.filepath=文件全路径,filename=文件名称* @author yjg**/public class FileDownload extends HttpServlet{/*** httpServletID号*/private static final long serialVersionUID = 101L;public void service(HttpServletRequest req,HttpServletResponse res) throws IOException{String filepath=req.getParameter("filepath");String filename=req.getParameter("filename");if(filepath!=null){File file=new File(filepath);if(!file.exists()){res.setContentType("text/html;charset=UTF-8");res.getWriter().print("指定文件不存在");return;}else{ServletOutputStream out=res.getOutputStream();res.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes("utf-8"),"iso8859-1"));//重新编码,不然可能会出现乱码现象sres.addHeader("Content-Length", ""+file.length());BufferedInputStream bis=null;BufferedOutputStream bos=null;try{bis=new BufferedInputStream(new FileInputStream(filepath));bos=new BufferedOutputStream(out);byte[] buff=new byte[2048];int bytesRead;while(-1!=(bytesRead=bis.read(buff,0,buff.length))){bos.write(buff,0,bytesRead);}}catch(Exception e){e.printStackTrace();res.setContentType("text/html;charset=UTF-8");res.getWriter().print("文件已找到,下载失败");return;}finally{if(bis!=null)bis.close();if(bos!=null)bos.close();}}}}}web.xml配置<servlet><servlet-name>FileDownload</servlet-name><servlet-class>com.imeOM.action.FileDownload</servlet-class> </servlet><servlet-mapping><servlet-name>FileDownload</servlet-name><url-pattern>/fileDownload</url-pattern></servlet-mapping>最后输入fileDownload?filepath=文件路径&filename=文件名称来下载了。
JavaWeb实现文件上传下载功能实例详解
JavaWeb实现⽂件上传下载功能实例详解在Web应⽤系统开发中,⽂件上传和下载功能是⾮常常⽤的功能,今天来讲⼀下JavaWeb中的⽂件上传和下载功能的实现。
⽂件上传概述1、⽂件上传的作⽤例如⽹络硬盘!就是⽤来上传下载⽂件的。
在智联招聘上填写⼀个完整的简历还需要上传照⽚呢。
2、⽂件上传对页⾯的要求上传⽂件的要求⽐较多,需要记⼀下:必须使⽤表单,⽽不能是超链接表单的method必须是POST,⽽不能是GET表单的enctype必须是multipart/form-data在表单中添加file表单字段,即<input type=”file” name=”xxx”/><form action="${pageContext.request.contextPath }/FileUploadServlet"method="post" enctype="multipart/form-data">⽤户名:<input type="text" name="username"/><br/>⽂件1:<input type="file" name="file1"/><br/>⽂件2:<input type="file" name="file2"/><br/><input type="submit" value="提交"/></form>3、⽐对⽂件上传表单和普通⽂本表单的区别通过httpWatch查看“⽂件上传表单”和“普通⽂本表单”的区别。
⽂件上传表单的enctype=”multipart/form-data”,表⽰多部件表单数据;普通⽂本表单可以不设置enctype属性:当method=”post”时,enctype的默认值为application/x-www-form-urlencoded,表⽰使⽤url编码正⽂当method=”get”时,enctype的默认值为null,没有正⽂,所以就不需要enctype了对普通⽂本表单的测试:<form action="${pageContext.request.contextPath }/FileUploadServlet" method="post">⽤户名:<input type="text" name="username"/><br/>⽂件1:<input type="file" name="file1"/><br/>⽂件2:<input type="file" name="file2"/><br/><input type="submit" value="提交"/></form>通过httpWatch测试,查看表单的请求数据正⽂,我们发现请求中只有⽂件名称,⽽没有⽂件内容。
java下载excel文件
java下载excel文件原代码剪切图片:修改后剪切图片:源码:public void downloadTaskModel()throws Exception{HttpServletResponse response = ToftServletContext.getContext().getResponse(); HttpServletRequest request = ToftServletContext.getContext().getRequest();String path = request.getRealPath("/");path = new String(path.getBytes("iso-8859-1"),"GBK");String matches = "[A-Za-z]:\\\\[^:?\"><*]*";if(!path.matches(matches)){throw new Exception("文件路径存在非法字符!");}path = path.replaceAll("\\\\", "/");File file = new File(path+"/templateFile/taskTemplate.xls");if(!file.isFile()||!file.exists()||file.isDirectory()){throw new Exception("下载的文件路径或文件不存在!");}//由于限制了导入模板的类型,所以在导出模板时必须限制。
if(!file.getName().matches(".*\\.(?i)(xls)$")){throw new Exception("当前模板类型有误,只能导出“.xls”格式的excel模板!"); }response.setContentType("application/x-msdownload");response.setContentLength((int)file.length());String taskNme = ClientUtils.getTimeStr(new Date(), "yyyyMMddHHmmss");response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("模板"+taskNme+".xls","UTF-8"));FileInputStream fis = new FileInputStream(file);BufferedInputStream buff = new BufferedInputStream(fis);byte b[] = new byte[1024];long k = 0 ;OutputStream myout = response.getOutputStream();while(k<file.length()){int j = buff.read(b,0,1024);k += j ;myout.write(b,0,j);}myout.flush();myout.close();}。
Java中都通用文件下载(ContentType、文件头、response、out四步骤)
Java中都通⽤⽂件下载(ContentType、⽂件头、response、out四步骤)我们就直接切⼊主题啦,⽂件下载只需要四步:1.设置⽂件ContentType类型2.设置⽂件头3.通过response获取ServletOutputStream对象(out)4.写到输出流(out)中下载代码:这⾥我使⽤的是SpringMVC,不过它在这⾥的唯⼀⽤途就是⽤来获取ServletContext对象,这个对象的⽤途,下⾯实例中有说明下载,需要⽤到两个jar包:commons-fileupload.jar和commons-io.jarJava代码1. import org.springframework.stereotype.Controller;2. import org.springframework.web.bind.annotation.RequestMapping;3. import org.springframework.web.context.ServletContextAware;4.5. import javax.servlet.ServletContext;6. import javax.servlet.ServletOutputStream;7. import javax.servlet.http.HttpServletResponse;8. import java.io.*;9.10. @Controller11. public class FileController implements ServletContextAware{12. //Spring这⾥是通过实现ServletContextAware接⼝来注⼊ServletContext对象13. private ServletContext servletContext;14.15.16. @RequestMapping("file/download")17. public void fileDownload(HttpServletResponse response){18. //获取⽹站部署路径(通过ServletContext对象),⽤于确定下载⽂件位置,从⽽实现下载19. String path = servletContext.getRealPath("/");20.21. //1.设置⽂件ContentType类型,这样设置,会⾃动判断下载⽂件类型22. response.setContentType("multipart/form-data");23. //2.设置⽂件头:最后⼀个参数是设置下载⽂件名(假如我们叫a.pdf)24. response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");25. ServletOutputStream out;26. //通过⽂件路径获得File对象(假如此路径中有⼀个download.pdf⽂件)27. File file = new File(path + "download/" + "download.pdf");28.29. try {30. FileInputStream inputStream = new FileInputStream(file);31.32. //3.通过response获取ServletOutputStream对象(out)33. out = response.getOutputStream();34.35. int b = 0;36. byte[] buffer = new byte[512];37. while (b != -1){38. b = inputStream.read(buffer);39. //4.写到输出流(out)中40. out.write(buffer,0,b);41. }42. inputStream.close();43. out.close();44. out.flush();45.46. } catch (IOException e) {47. e.printStackTrace();48. }49. }50.51. @Override52. public void setServletContext(ServletContext servletContext) {53. this.servletContext = servletContext;54. }55. }。
java+根据多个url批量下载文件
java+根据多个url批量下载⽂件1.基本流程当我们想要下载⽹站上的某个资源时,我们会获取⼀个url,它是服务器定位资源的⼀个描述,下载的过程有如下⼏步:(1)客户端发起⼀个url请求,获取连接对象。
(2)服务器解析url,并且将指定的资源返回⼀个输⼊流给客户。
(3)建⽴存储的⽬录以及保存的⽂件名。
(4)输出了写数据。
(5)关闭输⼊流和输出流。
2.实现代码的⽅法/*** 从⽹络Url中下载⽂件* @param urlStr* @param fileName* @param savePath* @throws IOException*/public static void downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection)url.openConnection();//设置超时间为3秒conn.setConnectTimeout(3*1000);//防⽌屏蔽程序抓取⽽返回403错误conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//得到输⼊流InputStream inputStream = conn.getInputStream();//获取⾃⼰数组byte[] getData = readInputStream(inputStream);//⽂件保存位置File saveDir = new File(savePath);if(!saveDir.exists()){saveDir.mkdir();}File file = new File(saveDir+File.separator+fileName);FileOutputStream fos = new FileOutputStream(file);fos.write(getData);if(fos!=null){fos.close();}if(inputStream!=null){inputStream.close();}System.out.println("info:"+url+" download success");}/*** 从输⼊流中获取字节数组* @param inputStream* @return* @throws IOException*/public static byte[] readInputStream(InputStream inputStream) throws IOException {byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream bos = new ByteArrayOutputStream();while((len = inputStream.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.close();return bos.toByteArray();}public static void main(String[] args) {try{downLoadFromUrl("http://101.95.48.97:8005/res/upload/interface/apptutorials/manualstypeico/6f83ce8f-0da5-49b3-bac8-fd5fc67d2725.png","百度.jpg","d:/resource/images/diaodiao/country/");}catch (Exception e) {// TODO: handle exception}}效果展现:<img src="/869c614f.jpg" data-ke-src="/869c614f.jpg" ,="" tahoma,="" verdana,="" helvetica;="" font-size:="" 12px;="" white-space:="" normal;"="" alt="" style="border-width: 0; max-width: 900px; height: auto; font-size: 14.4px; white-space: pre-wrap; background-color: rgba(238, 238, 238, 1); font-family: "sans serif"">详细配置可参考我写的这篇⽂章:。
java下载Excel模板(工具类)
java下载Excel模板(⼯具类) ⼀次⽂件下载记录 ⼀次不成熟的⽂件下载操作记录,希望能对需要的⼈有所帮助。
1.前端代码$("#downloadModel").click(function(){ var modelName = "设备信息导⼊模板.xls"; window.location.href = commenUrl +"/importAndExport/downloadModel?modelName="+modelName;});2.控制层接收1 @RequestMapping(value = "/downloadModel", method = RequestMethod.GET)2public void downloadModel(HttpServletRequest request,HttpServletResponse response,String modelName) {3try {4 importAndExportService.downloadModel(modelName,request,response);5 } catch (Exception e) {6 e.printStackTrace();7 }8 }3.实现下载功能 @SuppressWarnings("resource")@Overridepublic void downloadBindModel(String modelName, HttpServletRequest request,HttpServletResponse response) throws Exception {//获取模板存放的路径String path=request.getSession().getServletContext().getRealPath("/")+"/excelTemplate/";InputStream is=new FileInputStream(new File(path + modelName));HSSFWorkbook hssfWorkbook=new HSSFWorkbook(is);//下载DownloadUtil dUtil=new DownloadUtil();ByteArrayOutputStream os=new ByteArrayOutputStream();hssfWorkbook.write(os);dUtil.download(os, response, modelName);os.flush();os.close();is.close();}4.⼯具类代码public class DownloadUtil{/*** @param filePath 要下载的⽂件路径* @param returnName 返回的⽂件名* @param response HttpServletResponse* @param delFlag 是否删除⽂件*/protected void download(String filePath, String returnName, HttpServletResponse response, boolean delFlag){this.prototypeDownload(new File(filePath), returnName, response, delFlag);}/*** @param file 要下载的⽂件* @param returnName 返回的⽂件名* @param response HttpServletResponse* @param delFlag 是否删除⽂件*/protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){this.prototypeDownload(file, returnName, response, delFlag);}/*** @param file 要下载的⽂件* @param returnName 返回的⽂件名* @param response HttpServletResponse* @param delFlag 是否删除⽂件*/public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){// 下载⽂件FileInputStream inputStream = null;ServletOutputStream outputStream = null;try {if(!file.exists()) {return;}response.reset();//设置响应类型 PDF⽂件为"application/pdf",WORD⽂件为:"application/msword", EXCEL⽂件为:"application/vnd.ms-excel"。
Java调用阿里云OSS下载文件
Java调⽤阿⾥云OSS下载⽂件1、准备⼯作2、项⽬需求 ⾸先需要引⼊阿⾥云的依赖包,如下所⽰:1 <!--阿⾥云oss -->2 <dependency>3 <groupId>com.aliyun.oss</groupId>4 <artifactId>aliyun-sdk-oss</artifactId>5 <version>3.10.2</version>6 </dependency> 如果只是想将oss⽂件下载到服务器的磁盘⾥⾯,可以使⽤下⾯的案例。
需要注意的就是OSS的⽂件⽬录下⾯的⽂件,指定下载路径的时候⼀定要写正常,不然会报NoSuchKey的异常信息。
1 package com.controller;23 import java.io.File;45 import org.slf4j.Logger;6 import org.slf4j.LoggerFactory;7 import org.springframework.beans.factory.annotation.Value;8 import org.springframework.stereotype.Controller;9 import org.springframework.web.bind.annotation.RequestMapping;10 import org.springframework.web.bind.annotation.ResponseBody;1112 import com.aliyun.oss.OSS;13 import com.aliyun.oss.OSSClientBuilder;14 import com.aliyun.oss.model.GetObjectRequest;15 import com.aliyun.oss.model.OSSObject;1617 @Controller18 @RequestMapping(value = "/oss")19public class ServiceMattersOSSController {2021// ⽇志记录器22private static final Logger logger = LoggerFactory.getLogger(ServiceMattersOSSController.class);2324// 地域节点25 @Value("${aliyun.oss.file.endpoint}")26private String endpoint;2728// 创建accesskey⽣成的keyid29 @Value("${aliyun.oss.file.keyid}")30private String accessKeyId;3132// 创建accesskey⽣成的secret33 @Value("${aliyun.oss.file.keysecret}")34private String accessKeySecret;3536// 创建bucket时输⼊的名称37 @Value("${aliyun.oss.file.bucketname}")38private String bucketName;3940// 阿⾥云OSS规范,Object绝对路径名前⾯不需要加斜杠41 @Value("${aliyun.oss.file.folder}")42private String folder;4344/**45 * 下载⽂件到本地路径46 *47 * fwsx库的clwj字段取字段。
如何编译github java源代码
编译GitHub上的Java源代码是一项重要的技能,它有助于开发人员理解开源项目的工作原理,并进行定制化开发。
下面,我们将介绍如何使用常见的工具和技术来编译GitHub上的Java源代码。
一、下载源代码1. 在GitHub上搜索并找到你感兴趣的Java开源项目。
2. 点击项目页面上的“Clone or download”按钮,复制项目的Git 仓库URL。
3. 在本地的命令行界面中,使用git clone命令将项目克隆到本地。
二、配置开发环境1. 确保你的开发环境中已经安装了Java Development Kit(JDK),并配置了JAVA_HOME环境变量。
2. 如果项目使用了Maven或Gradle等构建工具,你需要在本地安装相应的工具,并配置好对应的环境变量。
三、使用Maven编译Java源代码1. 打开命令行界面,进入到项目的根目录。
2. 执行mvn clean install命令,Maven将会下载依赖、编译源代码并打包项目。
四、使用Gradle编译Java源代码1. 打开命令行界面,进入到项目的根目录。
2. 执行gradle build命令,Gradle将会下载依赖、编译源代码并打包项目。
五、使用Ant编译Java源代码1. 确保你已经安装了Ant,并配置了ANT_HOME环境变量。
2. 在项目根目录的命令行界面中,执行ant命令,Ant将会根据build.xml文件编译源代码。
六、使用集成开发环境(IDE)编译Java源代码1. 打开你喜欢的IDE,比如IntelliJ IDEA、Eclipse等。
2. 导入项目,IDE将会自动下载依赖并编译源代码。
七、其他注意事项1. 在编译过程中可能会遇到依赖缺失、版本不兼容等问题,需要仔细阅读项目的文档和日志,进行相应的调整。
2. 如果项目包含单元测试,你可能需要在编译之前执行测试,并确保所有测试用例通过。
3. 如果你对源代码进行了修改,可以使用相同的步骤来编译并测试你的修改。
文件下载JAVA源代码
}
public void downloadNet(HttpServletResponse response) throws MalformedURLException {
// 下载网络文件
int bytesum = eam out = response.getOutputStream();
while ((len = br.read(buf)) > 0 )
out.write(buf, 0 , len);
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
InputStream inStream = conn.getInputStream();
FileOutputStream fs = new FileOutputStream( " c:/abc.gif " );
byte [] buffer = new byte [ 1204 ];
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL( " file:/// " + filePath);
response.setContentType(u.openConnection().getContentType());
int byteread = 0 ;
URL url = new URL( " /logo.gif " );
try {
URLConnection conn = url.openConnection();
Java后台Controller实现文件下载操作
Java后台Controller实现⽂件下载操作代码参数:1.filePath:⽂件的绝对路径(d:\download\a.xlsx)2.fileName(a.xlsx)3.编码格式(GBK)4.response、request不介绍了,从控制器传⼊的http对象代码⽚.//控制器@RequestMapping(UrlConstants.BLACKLIST_TESTDOWNLOAD)public void downLoad(String filePath, HttpServletResponse response, HttpServletRequest request) throws Exception {boolean is = myDownLoad("D:\\a.xlsx","a.xlsx","GBK",response,request);if(is)System.out.println("成功");elseSystem.out.println("失败");}//下载⽅法public boolean myDownLoad(String filePath,String fileName, String encoding, HttpServletResponse response, HttpServletRequest request){ File f = new File(filePath);if (!f.exists()) {try {response.sendError(404, "File not found!");} catch (IOException e) {e.printStackTrace();}return false;}String type = fileName.substring(stIndexOf(".") + 1);//判断下载类型 xlsx 或 xls 现在只实现了xlsx、xls两个类型的⽂件下载if (type.equalsIgnoreCase("xlsx") || type.equalsIgnoreCase("xls")){response.setContentType("application/force-download;charset=UTF-8");final String userAgent = request.getHeader("USER-AGENT");try {if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Edge")) {// IE浏览器fileName = URLEncoder.encode(fileName, "UTF8");} else if (StringUtils.contains(userAgent, "Mozilla")) {// google,⽕狐浏览器fileName = new String(fileName.getBytes(), "ISO8859-1");} else {fileName = URLEncoder.encode(fileName, "UTF8");// 其他浏览器}response.setHeader("Content-disposition", "attachment; filename=" + fileName);} catch (UnsupportedEncodingException e) {logger.error(e.getMessage(), e);return false;}InputStream in = null;OutputStream out = null;try {//获取要下载的⽂件输⼊流in = new FileInputStream(filePath);int len = 0;//创建数据缓冲区byte[] buffer = new byte[1024];//通过response对象获取outputStream流out = response.getOutputStream();//将FileInputStream流写⼊到buffer缓冲区while((len = in.read(buffer)) > 0) {//使⽤OutputStream将缓冲区的数据输出到浏览器out.write(buffer,0,len);}//这⼀步⾛完,将⽂件传⼊OutputStream中后,页⾯就会弹出下载框} catch (Exception e) {logger.error(e.getMessage(), e);return false;} finally {try {if (out != null)out.close();if(in!=null)in.close();} catch (IOException e) {logger.error(e.getMessage(), e);}}return true;}else {logger.error("不⽀持的下载类型!");return false;}}实现效果1.⽕狐浏览器效果2.chrome效果,⾃动下载补充知识:⽂件上传/下载的⼏种写法(java后端)⽂件上传1、框架已经帮你获取到⽂件对象File了public boolean uploadFileToLocale(File uploadFile,String filePath) { boolean ret_bl = false;try {InputStream in = new FileInputStream(uploadFile);ret_bl=copyFile(in,filePath);} catch (Exception e) {e.printStackTrace();}return ret_bl;}public boolean copyFile(InputStream in,String filePath) {boolean ret_bl = false;FileOutputStream os=null;try {os = new FileOutputStream(filePath,false);byte[] b = new byte[8 * 1024];int length = 0;while ((length = in.read(b)) > 0) {os.write(b, 0, length);}os.close();in.close();ret_bl = true;} catch (Exception e) {e.printStackTrace();}finally{try {if(os!=null){os.close();}if(in!=null){in.close();}} catch (IOException e) {e.printStackTrace();}}return ret_bl;}}2、天了个撸,SB架构师根本就飘在天空没下来,根本就没想⽂件上传这⼀回事public String uploadByHttp(HttpServletRequest request) throws Exception{String filePath=null;List<String> fileNames = new ArrayList<>();//创建⼀个通⽤的多部分解析器CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());//判断 request 是否有⽂件上传,即多部分请求if(multipartResolver.isMultipart(request)){//转换成多部分requestMultipartHttpServletRequest multiRequest =multipartResolver.resolveMultipart(request);MultiValueMap<String,MultipartFile> multiFileMap = multiRequest.getMultiFileMap();List<MultipartFile> fileSet = new LinkedList<>();for(Entry<String, List<MultipartFile>> temp : multiFileMap.entrySet()){fileSet = temp.getValue();}String rootPath=System.getProperty("user.dir");for(MultipartFile temp : fileSet){filePath=rootPath+"/tem/"+temp.getOriginalFilename();File file = new File(filePath);if(!file.exists()){file.mkdirs();}fileNames.add(temp.getOriginalFilename());temp.transferTo(file);}}}3、神啊,我正在撸框架,请问HttpServletRequest怎么获取(1)在web.xml中配置⼀个监听<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>(2)HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();⽂件下载(直接⽤链接下载的不算),这⽐较简单1、本地⽂件下载(即⽂件保存在本地)public void fileDownLoad(HttpServletRequest request,HttpServletResponse response,String fileName,String filePath) throws Exception {response.setCharacterEncoding("UTF-8");//设置ContentType字段值response.setContentType("text/html;charset=utf-8");//通知浏览器以下载的⽅式打开response.addHeader("Content-type", "appllication/octet-stream");response.addHeader("Content-Disposition", "attachment;filename="+fileName);//通知⽂件流读取⽂件InputStream in = request.getServletContext().getResourceAsStream(filePath);//获取response对象的输出流OutputStream out = response.getOutputStream();byte[] buffer = new byte[1024];int len;//循环取出流中的数据while((len = in.read(buffer)) != -1){out.write(buffer,0,len);}}2、远程⽂件下载(即⽹上资源下载,只知道⽂件URI)public static void downLoadFromUrl(String urlStr,String fileName,HttpServletResponse response){try {urlStr=urlStr.replaceAll("\\\\", "/");URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection)url.openConnection();//设置超时间为3秒conn.setConnectTimeout(3*1000);//防⽌屏蔽程序抓取⽽返回403错误conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//得到输⼊流InputStream inputStream = conn.getInputStream();response.reset();response.setContentType("application/octet-stream; charset=utf-8");response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("GBK"),"ISO8859_1"));//获取响应报⽂输出流对象//获取response对象的输出流OutputStream out = response.getOutputStream();byte[] buffer = new byte[1024];int len;//循环取出流中的数据while((len = in.read(buffer)) != -1){out.write(buffer,0,len);}} catch (Exception e) {e.printStackTrace();}}以上这篇Java后台Controller实现⽂件下载操作就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
反编译Apk得到Java源代码(apk xml源文件)
1、下载apktool,可以去Google的官方下载,地址:/p/android-apktool/得,apktool1.3.2.tar.bz2和apktool-install-windows-2.2_r01-3.tar.bz2两个包都要下。
解压apktool1.3.2.tar.bz2得到apktool.jar放到 C:\Windows ,解压apktool-install-windows-2.2_r01-3.tar.bz2到C:\Windows下,记住了,解压后的几个文件放到同一文件夹。
2、打开命令窗口(开始 > 运行,输入cmd,回车。
)进入到apktool.bat的文件夹里。
输入:apktool d C:\***.apk C:\***文件夹(命令行解释:apktool d 要反编译的文件输出文件夹)4、如果出了以下的问题:Exception in thread "main" ng.UnsupportedClassVersionError: Bad version n umber in .class fileat ng.ClassLoader.defineClass1(Native Method)at ng.ClassLoader.defineClass(ClassLoader.java:620)atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)at .URLClassLoader.defineClass(URLClassLoader.java:260)at .URLClassLoader.access$100(URLClassLoader.java:56)at .URLClassLoader$1.run(URLClassLoader.java:195)at java.security.AccessController.doPrivileged(Native Method)at .URLClassLoader.findClass(URLClassLoader.java:188)at ng.ClassLoader.loadClass(ClassLoader.java:306)at uncher$AppClassLoader.loadClass(Launcher.java:268)at ng.ClassLoader.loadClass(ClassLoader.java:251)at ng.ClassLoader.loadClassInternal(ClassLoader.java:319)版本问题,装了个jre6,在360中的软件管家可以找到的,记得装完后配置path路径,果然,ok。
Java使用word文档模板下载文件(内容为表格)
Java使⽤word⽂档模板下载⽂件(内容为表格)注意:1、此Demo操作的是word的表格2、本次使⽤的word后缀为docx1、pom引⽤jar<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>2、代码import org.apache.poi.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.util.Units;import ermodel.*;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.core.io.ClassPathResource;import java.io.*;import java.util.HashMap;import java.util.List;import java.util.Map;/*** word模板赋值下载** @author a*/@SpringBootApplicationpublic class ReadResourceApplication {/*** 主⽅法** @param args*/public static void main(String[] args) {SpringApplication.run(ReadResourceApplication.class, args);Map map = new HashMap(3);map.put("${name}", "测试");map.put("${sexName}", "男");map.put("${mzName}", "汉");getBuild("wordXML/领导⼲部基本情况信息表.docx", map, "D:/aaa.doc");}/*** 赋值并下载⽂件** @param tmpFile* @param contentMap* @param exportFile*/public static void getBuild(String tmpFile, Map<String, String> contentMap, String exportFile) {InputStream inputStream = null;try {// 加载Word⽂件inputStream = new ClassPathResource(tmpFile).getInputStream();} catch (IOException e) {e.printStackTrace();}XWPFDocument document = null;try {// 加载流到documentdocument = new XWPFDocument(inputStream);} catch (IOException e) {e.printStackTrace();}// 获取⽂档中的表格List<XWPFTable> tables = document.getTables();for (int j = 0; j < tables.size(); j++) {XWPFTable table = tables.get(j);// 获取表格⾏List<XWPFTableRow> rows = table.getRows();for (int i = 0; i < rows.size(); i++) {// 得到每⼀⾏XWPFTableRow newRow = table.getRow(i);// 得到所有的单元格List<XWPFTableCell> cells = newRow.getTableCells();for (int k = 0; k < cells.size(); k++) {// 得到每⼀列XWPFTableCell cell = cells.get(k);// 以下为更新替换值逻辑List<XWPFParagraph> paragraphs = cell.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {List<XWPFRun> runs = paragraph.getRuns();String cellText = cell.getText();if (contentMap.keySet().contains(cellText)) {for (int m = 0; m < runs.size(); m++) {if (m == runs.size() - 1) {runs.get(m).setText(contentMap.get(cellText), 0);} else {runs.get(m).setText("", 0);}}} else if (cellText.equals("${picture}")) {for (int m = 0; m < runs.size(); m++) {if (m == runs.size() - 1) {try {runs.get(m).setText("", 0);runs.get(m).addPicture(new ClassPathResource("wordXML/培训⼆维码.png").getInputStream(), XWPFDocument.PICTURE_TYPE_PNG, "培训⼆维码.png,", Units.toEMU(200), Units.toEMU(200)); } catch (InvalidFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} else {runs.get(m).setText("", 0);}}}}}}}//导出⽂件到磁盘try {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();document.write(byteArrayOutputStream);OutputStream outputStream = new FileOutputStream(exportFile);outputStream.write(byteArrayOutputStream.toByteArray());outputStream.close();} catch (IOException e) {e.printStackTrace();}}}需要更改的地⽅:1、word⽂档路径2、图⽚路径(不需要图⽚的可直接删除相关代码)。
java实现文件下载.
在BlogJava上已经有一位作者阐述了文件上传的问题, 地址是在Struts 2中实现文件上传 , 因此我就不再讨论那个话题了。
我今天简单介绍一下Struts 2的文件下载问题。
我们的项目名为 struts2hello ,所使用的开发环境是MyEclipse 6,当然其实用哪个 IDE 都 是一样的,只要把类库放进去就行了,文件下载不需要再加入任何额外的包。
读者可以参考 文档:http://beansoft.java/myeclipse_doc_cn/struts2_demo.pdf ,来了解怎么下载 和配置基本的 Struts 2开发环境。
为了便于大家对比,我把完整的 struts.xml 的配置信息列出来:Xml代码1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE struts PUBLIC3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4 "/dtds/struts-2.0.dtd">56 <struts>7 <package name="default" extends="struts-default" >8 <!-- 在这里添加 Action 定义 -->910 <!-- 简单文件下载 -->11 <action name="download" class="example.FileDownloadAction">12 <result name="success" type="stream">13 <param name="contentType">text/plain</param>14 <param name="inputName">inputStream</param>15 <paramname="contentDisposition">attachment;filename="struts2中文.txt"</param>16 <param name="bufferSize">4096</param>17 </result>18 </action>1920 <!-- 文件下载,支持中文附件名 -->21 <action name="download2" class="example.FileDownloadAction2">22 <!-- 初始文件名 -->23 <param name="fileName">Struts 中文附件.txt</param>24 <result name="success" type="stream">25 <param name="contentType">text/plain</param>26 <param name="inputName">inputStream</param>27 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName属性28 对应 action类中的方法 getDownloadFileName() -->29 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>30 <param name="bufferSize">4096</param>31 </result>32 </action>3334 <!-- 下载现有文件 -->35 <action name="download3" class="example.FileDownloadAction3">36 <param name="inputPath">/download/系统说明.doc</param>37 <!-- 初始文件名 -->38 <param name="fileName">系统说明.doc</param>39 <result name="success" type="stream">40 <paramname="contentType">application/octet-stream;charset=ISO8859-1</param>41 <param name="inputName">inputStream</param>42 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName属性43 对应 action类中的方法 getDownloadFileName() -->44 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>45 <param name="bufferSize">4096</param>46 </result>47 </action>4849 </package>5051 </struts>Xml代码52 <?xml version="1.0" encoding="UTF-8" ?>53 <!DOCTYPE struts PUBLIC54 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"55 "/dtds/struts-2.0.dtd">5657 <struts>58 <package name="default" extends="struts-default" >59 <!-- 在这里添加 Action 定义 -->6061 <!-- 简单文件下载 -->62 <action name="download" class="example.FileDownloadAction">63 <result name="success" type="stream">64 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">text/plain</param>65 <param name="inputName">inputStream</param>66 <paramname="contentDisposition">attachment;filename="<SPAN class=hilite1><SPANstyle="BACKGROUND-COLOR: #ffff00">struts2</SPAN></SPAN>中文.txt"</param>67 <param name="bufferSize">4096</param>68 </result>69 </action>7071 <!-- 文件下载,支持中文附件名 -->72 <action name="download2" class="example.FileDownloadAction2">73 <!-- 初始文件名 -->74 <param name="fileName">Struts 中文附件.txt</param>75 <result name="success" type="stream">76 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">text/plain</param>77 <param name="inputName">inputStream</param>78 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName 属性79 对应 action类中的方法 getDownloadFileName() -->80 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>81 <param name="bufferSize">4096</param>82 </result>83 </action>8485 <!-- 下载现有文件 -->86 <action name="download3" class="example.FileDownloadAction3">87 <param name="inputPath">/download/系统说明.<SPANclass=hilite5>doc</SPAN></param>88 <!-- 初始文件名 -->89 <param name="fileName">系统说明.<SPANclass=hilite5>doc</SPAN></param>90 <result name="success" type="stream">91 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">application/octet-stream;charset=ISO885 9-1</param>92 <param name="inputName">inputStream</param>93 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName 属性94 对应 action类中的方法 getDownloadFileName() -->95 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>96 <param name="bufferSize">4096</param>97 </result>98 </action>99100 </package>101102</struts>Struts 2中对文件下载做了直接的支持,相比起自己辛辛苦苦的设置种种HTTP 头来说,现 在实现文件下载无疑要简便的多。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package com;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class mydown extends HttpServlet{
/**
*Constructor of the object.
*/
public mydown(){
super();
}
/**
*Destruction of the servlet.<br>
*/
public void destroy(){
super.destroy();//Just puts"destroy"string in log
//Put your code here
}
/**
*The doGet method of the servlet.<br>
*
*This method is called when a form has its tag value method equals to get.
*
*@param request the request send by the client to the server
*@param response the response send by the server to the client
*@throws ServletException if an error occurred
*@throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
String filename2=new String(request.getParameter("filename").getBytes("ISO8859-1"),"UTF-8");
response.setContentType("text/html");
//PrintWriter out=response.getWriter();
InputStream in;
OutputStream out;
in=this.getClass().getResourceAsStream("/store/"+filename2);
int length=in.available();
out=response.getOutputStream();
response.setContentType("application/force-download");
response.setHeader("Content-Length",String.valueOf(length));
response.setHeader("Content-Disposition","attachment;filename="+new String(filename2.getBytes("GBK"),"ISO8859-1"));
byte myByte[]=new byte[1024];
int x=0;
while((x=in.read(myByte))!=-1)
{
out.write(myByte,0,x);
}
in.close();
out.close();
}
/**
*The doPost method of the servlet.<br>
*
*This method is called when a form has its tag value method equals to post.
*
*@param request the request send by the client to the server
*@param response the response send by the server to the client
*@throws ServletException if an error occurred
*@throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC\"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("<BODY>");
out.print("This is");
out.print(this.getClass());
out.println(",using the POST method");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
*Initialization of the servlet.<br>
*
*@throws ServletException if an error occure
*/
public void init()throws ServletException{
//Put your code here
}
}。