- 浏览: 659367 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (173)
- JavaEE (23)
- PHP (3)
- Ubuntu (13)
- Spring (5)
- SSH (5)
- Json (3)
- Interceptor (3)
- 设计模式 (9)
- Oracle (8)
- JavaScript (6)
- sqlserver (6)
- apache (4)
- app (8)
- android (5)
- MySQL (2)
- wordpress (1)
- tomcat (0)
- C++ (1)
- github (1)
- 分享 (15)
- Struts (1)
- mac (18)
- node (2)
- jetty (1)
- Objective-C (2)
- ruby (1)
- IOS (22)
- centos (4)
- xcode (5)
- design (3)
- swift (1)
- sketch (1)
- linux (1)
最新评论
-
e_Inch_Photo:
这样配置之后,返回json数据直接报错:no convertt ...
Spring MVC3返回JSON数据中文乱码问题解决 -
BreakingBad:
表情图标表情图标http://www.iteye.com/im ...
文件下载(只需要简单的四步),Java中都通用 -
王庆波-行:
学习了,感谢分享
[oracle]windows 上 解决ORA-12560: TNS: 协议适配器错误 -
meigesir:
hy110912 写道不知道你从哪里抄来的 还是怎么样 报错 ...
SSH整合:使用DAO框架(BaseDao),DAO不写或少写,我们更加专注业务 -
hy110912:
不知道你从哪里抄来的 还是怎么样 报错都不知道 还令人兴奋 ...
SSH整合:使用DAO框架(BaseDao),DAO不写或少写,我们更加专注业务
我们就直接切入主题啦,文件下载只需要四步:
1.设置文件ContentType类型
2.设置文件头
3.通过response获取ServletOutputStream对象(out)
4.写到输出流(out)中
下载代码:
这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletContext对象,这个对象的用途,下面实例中有说明
下载,需要用到两个jar包:commons-fileupload.jar和commons-io.jar
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.ServletContextAware; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; @Controller public class FileController implements ServletContextAware{ //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象 private ServletContext servletContext; @RequestMapping("file/download") public void fileDownload(HttpServletResponse response){ //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载 String path = servletContext.getRealPath("/"); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("multipart/form-data"); //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf) response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf"); ServletOutputStream out; //通过文件路径获得File对象(假如此路径中有一个download.pdf文件) File file = new File(path + "download/" + "download.pdf"); try { FileInputStream inputStream = new FileInputStream(file); //3.通过response获取ServletOutputStream对象(out) out = response.getOutputStream(); int b = 0; byte[] buffer = new byte[512]; while (b != -1){ b = inputStream.read(buffer); //4.写到输出流(out)中 out.write(buffer,0,b); } inputStream.close(); out.close(); out.flush(); } catch (IOException e) { e.printStackTrace(); } } @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } }
评论
33 楼
BreakingBad
2017-10-20
表情图标
表情图标
http://www.iteye.com/images/s表情图标
Utils.closeQuietly(input);
}
第一句,application单词拼错了老大...
14 楼 matychen 2012-05-24 引用
response.setContentType("aapplication/vnd.ms-excel ;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
13 楼 wzju64676266 2012-05-24 引用
wzju64676266 写道
如果文件超过 byte[] buffer = new byte[512]; 那不就有问题?
看错了,当我没问
« 上一页 1 2 下一页 »
发表评论
表情图标
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
miles/icon_biggrin.gif看错了,当我没问
« 上一页 1 2 下一页 »
发表评论
表情图标
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
表情图标
http://www.iteye.com/images/s表情图标
Utils.closeQuietly(input);
}
第一句,application单词拼错了老大...
14 楼 matychen 2012-05-24 引用
response.setContentType("aapplication/vnd.ms-excel ;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
13 楼 wzju64676266 2012-05-24 引用
wzju64676266 写道
如果文件超过 byte[] buffer = new byte[512]; 那不就有问题?
看错了,当我没问
« 上一页 1 2 下一页 »
发表评论
表情图标
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
miles/icon_biggrin.gif看错了,当我没问
« 上一页 1 2 下一页 »
发表评论
表情图标
BIUQuoteCodeListImgURLFlashTable
字体颜色: 字体大小: 对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
32 楼
ifox
2012-12-05
zhaoruiqing 写道
唔系好人 写道
zhaoruiqing 写道
如果浏览器安装了类似迅雷的东西。。有时比较麻烦啊。。。他总会给你下载一个.do文件,十分不爽,不知道是什么原因
因为你是通过访问了.do后缀的actioin去处理下载文件的!!不是直接访问文件在网站下的目录!!
我觉得这个很正常吧。。。我需要在他点击下载后再生成下载文件。那么不走action走什么呢。关键我觉得在于后台给前台提供的是一个文件流还是一个文件吧。。。猜测而已
嗯 。我现在也碰到了这种事,一个小项目。需要有一个导出excel功能,我在页面上把头清理下,设置成xls格式,别的浏览器都能弹出下载的框,而360浏览器就不行。好郁闷。
31 楼
zhaoruiqing
2012-06-13
唔系好人 写道
zhaoruiqing 写道
如果浏览器安装了类似迅雷的东西。。有时比较麻烦啊。。。他总会给你下载一个.do文件,十分不爽,不知道是什么原因
因为你是通过访问了.do后缀的actioin去处理下载文件的!!不是直接访问文件在网站下的目录!!
我觉得这个很正常吧。。。我需要在他点击下载后再生成下载文件。那么不走action走什么呢。关键我觉得在于后台给前台提供的是一个文件流还是一个文件吧。。。猜测而已
30 楼
Mossad
2012-05-26
meigesir 写道
Mossad 写道
meigesir 写道
Mossad 写道
meigesir 写道
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
你的这段代码是写在Servlet里面还是写在Action里面?如果是写在Action里面,如何在struts.xml定义里面定义返回值?我知道使用Struts的下载时配置文件大概是这样子的:
<action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">\images\疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>然后在Action里面必须提供一个public InputStream getTargetFile()的方法返回一个InputStream来获取下载文件的输入流,而workbook只能使用write(out)这样的方法,这样的话能够在Action里面做Excel导出吗?
这种下载代码通用呀,也有专门针对Struts的:注解和xml中配置两种方式...
代码是通用的没问题,关键是最后输出文件的方式,POI的workbook.write(outputStream)是用来输出生成的Excel的,如果是在Servlet中那么没问题,outputStream直接使用response的outputStream就行,但是如果是在Struts的Action中,就不能够直接使用response的outputStream,必须要通过Struts对应Acton的<result>标签指定的资源来响应客户端的请求,Struts下载的result类型是stream,这个在我给的配置文件中有,而且Struts必须要求提供一个InputStream,但是POI的workbook生成文件的方法是workbook.write(outputStream),注意到这里的一个是要求InputStream,一个只能提供outputStream,这就是我所说的撞车的地方!(不知道我说清楚了没有)
恩 好,我这一段有点忙 不能及时回复 请谅解呀 盆友...
冒得事,呵呵
29 楼
meigesir
2012-05-26
Mossad 写道
meigesir 写道
Mossad 写道
meigesir 写道
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
你的这段代码是写在Servlet里面还是写在Action里面?如果是写在Action里面,如何在struts.xml定义里面定义返回值?我知道使用Struts的下载时配置文件大概是这样子的:
<action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">\images\疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>然后在Action里面必须提供一个public InputStream getTargetFile()的方法返回一个InputStream来获取下载文件的输入流,而workbook只能使用write(out)这样的方法,这样的话能够在Action里面做Excel导出吗?
这种下载代码通用呀,也有专门针对Struts的:注解和xml中配置两种方式...
代码是通用的没问题,关键是最后输出文件的方式,POI的workbook.write(outputStream)是用来输出生成的Excel的,如果是在Servlet中那么没问题,outputStream直接使用response的outputStream就行,但是如果是在Struts的Action中,就不能够直接使用response的outputStream,必须要通过Struts对应Acton的<result>标签指定的资源来响应客户端的请求,Struts下载的result类型是stream,这个在我给的配置文件中有,而且Struts必须要求提供一个InputStream,但是POI的workbook生成文件的方法是workbook.write(outputStream),注意到这里的一个是要求InputStream,一个只能提供outputStream,这就是我所说的撞车的地方!(不知道我说清楚了没有)
恩 好,我这一段有点忙 不能及时回复 请谅解呀 盆友...
28 楼
Mossad
2012-05-26
meigesir 写道
Mossad 写道
meigesir 写道
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
你的这段代码是写在Servlet里面还是写在Action里面?如果是写在Action里面,如何在struts.xml定义里面定义返回值?我知道使用Struts的下载时配置文件大概是这样子的:
<action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">\images\疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>然后在Action里面必须提供一个public InputStream getTargetFile()的方法返回一个InputStream来获取下载文件的输入流,而workbook只能使用write(out)这样的方法,这样的话能够在Action里面做Excel导出吗?
这种下载代码通用呀,也有专门针对Struts的:注解和xml中配置两种方式...
代码是通用的没问题,关键是最后输出文件的方式,POI的workbook.write(outputStream)是用来输出生成的Excel的,如果是在Servlet中那么没问题,outputStream直接使用response的outputStream就行,但是如果是在Struts的Action中,就不能够直接使用response的outputStream,必须要通过Struts对应Acton的<result>标签指定的资源来响应客户端的请求,Struts下载的result类型是stream,这个在我给的配置文件中有,而且Struts必须要求提供一个InputStream,但是POI的workbook生成文件的方法是workbook.write(outputStream),注意到这里的一个是要求InputStream,一个只能提供outputStream,这就是我所说的撞车的地方!(不知道我说清楚了没有)
27 楼
meigesir
2012-05-25
Mossad 写道
meigesir 写道
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
你的这段代码是写在Servlet里面还是写在Action里面?如果是写在Action里面,如何在struts.xml定义里面定义返回值?我知道使用Struts的下载时配置文件大概是这样子的:
<action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">\images\疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>然后在Action里面必须提供一个public InputStream getTargetFile()的方法返回一个InputStream来获取下载文件的输入流,而workbook只能使用write(out)这样的方法,这样的话能够在Action里面做Excel导出吗?
这种下载代码通用呀,也有专门针对Struts的:注解和xml中配置两种方式...
26 楼
meigesir
2012-05-25
anglestudio 写道
帮我朋友写了个个人用的办公系统,用struts2+spring3做的,用的poi,导入excel的时候没什么问题,导出excel的时候一超过10个字段的就溢出,现在也没查处哪里的毛病
信息不太全呀
25 楼
Mossad
2012-05-25
meigesir 写道
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
你的这段代码是写在Servlet里面还是写在Action里面?如果是写在Action里面,如何在struts.xml定义里面定义返回值?我知道使用Struts的下载时配置文件大概是这样子的:
<action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">\images\疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>然后在Action里面必须提供一个public InputStream getTargetFile()的方法返回一个InputStream来获取下载文件的输入流,而workbook只能使用write(out)这样的方法,这样的话能够在Action里面做Excel导出吗?
24 楼
anglestudio
2012-05-25
帮我朋友写了个个人用的办公系统,用struts2+spring3做的,用的poi,导入excel的时候没什么问题,导出excel的时候一超过10个字段的就溢出,现在也没查处哪里的毛病
23 楼
meigesir
2012-05-25
Mossad 写道
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
首先导入poi的jar包
然后在方法中写入下面的实例:只是创建一行,创建多行类似
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("销售记录");
//创建一行
HSSFRow titleRow = sheet.createRow(0);
HSSFCell[] cellArray = new HSSFCell[8];
for(int i = 0;i < cellArray.length;i++){
cellArray[i] = titleRow.createCell(i);
}
cellArray[0].setCellValue("时间");
cellArray[1].setCellValue("单位");
cellArray[2].setCellValue("导游");
cellArray[3].setCellValue("联系电话");
cellArray[4].setCellValue("客源地");
cellArray[5].setCellValue("人数");
cellArray[6].setCellValue("销售额");
cellArray[7].setCellValue("客单价");
//设置MIME类型为excel
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"data.xls\"");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.close();
22 楼
Mossad
2012-05-25
有谁知道如何在Struts的Action中使用POI生成Excel,然后直接使用Struts的stream结果类型的将Excel文件返回到客户端吗?好蛋疼的POI啊,只能直接workbook.write(outputStream),Struts的stream又必须要一个inputStream,我又不想先生成文件存放在服务器上再去读,悲剧的追尾啊!有人能帮我想想办法不?
21 楼
meigesir
2012-05-25
IThead 写道
meigesir 写道
longfor5 写道
输出流是不是可以包装一下?!
当然可以啦,我刚才又试了一下
能提供一些实例吗?新人,想学习一下。谢谢!
把上面的代码:34行到44行换成下面代码,就是简单的包装:
BufferedOutputStream bout = new BufferedOutputStream(out);
int b = 0;
byte[] buffer = new byte[512];
while (b != -1){
b = inputStream.read(buffer);
bout.write(buffer,0,b);
}
inputStream.close();
bout.close();
bout.flush();
20 楼
meigesir
2012-05-25
IThead 写道
meigesir 写道
longfor5 写道
输出流是不是可以包装一下?!
当然可以啦,我刚才又试了一下
能提供一些实例吗?新人,想学习一下。谢谢!
今天课多,有空给你提供一下 呵呵...
19 楼
IThead
2012-05-25
meigesir 写道
longfor5 写道
输出流是不是可以包装一下?!
当然可以啦,我刚才又试了一下
能提供一些实例吗?新人,想学习一下。谢谢!
18 楼
meigesir
2012-05-25
mfkvfn 写道
把要下载的文件放在网站部署路径里面的upload目录中,汗一个。
下载的肯定是上传过的嘛,这个改成download,应该更靠谱,谢谢盆友...
17 楼
mfkvfn
2012-05-25
把要下载的文件放在网站部署路径里面的upload目录中,汗一个。
16 楼
ctfzh
2012-05-25
记录下。谢谢分享。
15 楼
meigesir
2012-05-25
matychen 写道
response.setContentType("aapplication/vnd.ms-excel ;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
第一句,application单词拼错了老大...
14 楼
matychen
2012-05-24
response.setContentType("aapplication/vnd.ms-excel ;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment; filename=" + downloadFileName);
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
发表评论
-
JSONP原理与实现
2014-12-17 19:05 851首先在客户端注册一个callback, 然后把call ... -
jar包有注解导出方式
2014-04-28 21:31 922如果项目中有注解,导出的时候要注意了,一定要勾选" ... -
Spring MVC3返回JSON数据中文乱码问题解决
2014-04-17 14:45 3898http://blog.csdn.net/zht666/ar ... -
XStream两分钟教程(译)
2013-08-08 15:28 992http://www.blogjava.net/qiyaden ... -
枚举类的一个简单实例
2013-07-25 10:40 1514public enum MsgTemplateTypeEnu ... -
JDBC为什么要使用PreparedStatement而不是Statement
2013-07-16 14:53 1044下面列出PreparedStatement的几点优势。 ... -
JVM----ClassLoader
2013-07-13 21:32 998当运行一个程序的时 ... -
ubuntu安装jdk全过程
2013-07-09 23:12 914我使用的是ubuntu 12.04,设置成功 http:/ ... -
Java 序列化和反序列化
2013-07-01 11:11 1641关Java对象的序列化和反序列化也算是Java基础的一部分 ... -
Spring中RedirectAttributes对象重定向传参
2013-05-29 18:45 9622Struts2式的FlashAttribute 为了防止用 ... -
java后台实现提取@用户功能
2013-05-27 11:26 1556import java.util.regex.Matche ... -
javax.inject.jar:依赖注入非常方便的jar包
2013-05-15 20:34 6505用过Spring框架的我们都知道,每当生成依赖注入的时候,我 ... -
IDEA:The method getJspApplicationContext(ServletContext) is undefined for ...
2013-05-11 00:16 1911一、异常提示:The method getJspApplic ... -
IntelliJ IDEA 导入外部jar包
2013-05-10 23:10 30206这篇博客只是介绍下如何引用外部jar包,其实导入jar包类似, ... -
IntelliJ IDEA 配置 Tomcat 7,部署,发布项目
2013-05-10 22:43 17683这个博客比较详细,地址:http://www.cnblogs. ... -
如何设置java classpath
2013-03-10 21:16 1545设置classpath可以在命令行上或通过环境变量设置,告诉 ... -
xml类型的字符串转换为Dom对象
2013-01-04 11:09 3536我写这篇博客的目的是因为我在这一点转换方面耽搁了快2天时间,真 ... -
java怎样把反斜杠"\"转成正斜杠"/"?
2012-08-31 10:44 12503反斜杠为"\",正斜杠为"/&q ... -
简单说一下Collection
2012-07-19 12:41 917三大集合:List、Set、Map List与Set: ... -
Java中两种排序源码:冒泡排序和选择排序法
2012-07-17 16:39 1453先都按从小到大排序: 1.冒泡排序源码: float ...
相关推荐
这两个API在Apache POI中都有支持,本工具可能需要根据文件格式选择相应的API进行操作。 4. **Excel数据导入** 导入Excel数据通常涉及以下步骤: - 打开Excel文件。 - 遍历工作表中的行和列。 - 使用反射创建...
在Java Web开发过程中,经常需要实现文件的导出功能。这涉及到将数据从服务器端导出为特定格式的文件(如Excel、PDF等),并提供给用户下载。在这个过程中,正确处理文件名是非常重要的一步,尤其是考虑到不同浏览器...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
每个类或接口在Java程序中都对应一个Class文件,它包含了类的结构信息,如类名、方法签名、常量池、字段和方法的字节码等。由于Class文件是二进制的,所以直接查看可能会比较困难,需要特定的工具来解析。 **JAR...
Java 和 C++ 之间的互通性在许多实际项目中都是至关重要的,特别是在跨平台的应用程序开发中。本主题探讨的是如何在 Java 和 C++ 中实现相同的加密算法,以便在这两个环境中可以无缝地交换加密数据。这里我们将专注...
Java语言具有跨平台、面向对象、安全性高、简单性等特点,已成为当今计算机软件开发领域不可或缺的一部分。本知识点将从Java练习题库中的内容出发,详细介绍Java语言的基础知识点。 首先,Java中的程序是由类...
然而,这些方式在每个查询中都需要编写重复的分页代码,这降低了代码的复用性。因此,创建一个通用的分页辅助类(如`Pagehelp.java`和`Page(hibernate通用分页).java`)是非常必要的。 `Pagehelp.java`可能包含一个...
在Java编程中,开发人员经常会遇到需要处理文件下载、上传、生成目录结构以及发送电子邮件等通用功能的情况。这些任务在各种应用程序中都是常见的,比如Web服务、后台管理系统或者用户交互的前端应用。为了提高代码...
ZIP格式则更通用,大多数操作系统都内置了对ZIP文件的支持。解压这些文件,你可以使用各种工具,如WinRAR、7-Zip或Windows自带的资源管理器。解压过程包括读取压缩文件的头信息,解密(如果被加密),然后使用相应的...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
此控件的优点在于其易用性和兼容性,开发者只需将解压缩后的JS文件导入到项目中,就能快速实现日历功能。这通常包括引入相关的JavaScript库、CSS样式表以及可能的图片资源,通过简单的配置和调用API,即可在网页上...
在Java中,"common"通常指的是那些在多个项目中都可以复用的通用代码或者模块。 1. **面向对象编程**:Java的核心特性之一是面向对象编程(OOP),它将现实世界中的实体抽象为类,通过实例化类来创建对象。类包含了...
`JCalendar`是一个第三方的Java Swing组件,它为用户提供了直观、易于使用的日期选择界面,使得在Java应用中处理日期变得更为简单。 `JCalendar`控件的核心特性包括: 1. **图形化界面**:`JCalendar`提供了一个...
- **异常处理**:在网络通信中,错误处理至关重要,包括连接失败、数据传输错误等,需要在Java和C++中都做好异常处理。 - **版本兼容性**:如果结构体的定义发生变化,需要考虑向后兼容,以确保旧版本的客户端仍能...
这八卷通用面试题集合了Java的基础知识、进阶特性、并发处理、内存管理、集合框架、多线程、异常处理、设计模式等多个方面的内容。以下是这些知识点的详细解析: 1. **Java基础**:包括语法基础如类、对象、封装、...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
对于一些通用的操作,如日期时间处理、字符串操作、数学计算等,Java标准库已经提供了如`java.util.Date`、`java.lang.String`和`java.lang.Math`等工具类。 通过这些工具类,开发者可以更高效地构建Java Web应用...
- Java应用程序可通过JAR文件部署,Java Applet已经过时且不安全,不建议使用。 ***应用程序则是通过装配集(Assemblies)进行部署,配置程序集和引用依赖。 - Java程序通过Java Web Start实现网络启动,涉及到...