`

文件下载(只需要简单的四步),Java中都通用

阅读更多

我们就直接切入主题啦,文件下载只需要四步

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;
    }
}
 

 

 

19
21
分享到:
评论
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
字体颜色:  字体大小:  对齐:
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
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);
}

第一句,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);
}

相关推荐

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...

    JAVA_API1.8中文文档(CHM版).rar

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JAVA_API1.6文档(中文)

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JavaAPI1.6中文chm文档 part1

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java 1.6 API 中文 New

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java api最新7.0

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java jdk-api-1.6 中文 chmd

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    JavaAPI中文chm文档 part2

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java 面试题 总结

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...

    [Java参考文档]

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    PDF文件的制作 (可移植文档格式)分类: JAVA

    PDF文件不管是在Windows,Unix还是在苹果公司的Mac OS操作系统中都是通用的……目前已成为数字化信息事实上的一个工业标准

    超爽的自学课件(java)

    &lt;br&gt;(8) 第8章:对象的容纳 对一个非常简单的程序来说,它可能只拥有一个固定数量的对象,而且对象的“生存时间”或者“存在时间”是已知的。但是通常,我们的程序会在不定的时间创建新对象,只有在程序运行...

    [Java参考文档].JDK_API 1.6

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    包含通用对象类的库叫作类库。 2.2.7 多态型 面向对象程序的最后一个概念是多态性。凭借多态性,你可以创建一个新的对象,它具 有与基对象相同的功能,但是这些功能中的一个或多个是通过不同的方式完成...

    1_6_zh_CN.CHM

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    超级有影响力霸气的Java面试题大全文档

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出...

    JDK_API_1_6_zh_CN_downcc.com.zip 良心一级分

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

Global site tag (gtag.js) - Google Analytics