怎么使用Java完成下载excel文件,服务器上excel文件是直接存在的而不是导出的(必须使用action)
直接使用IO读取写入,下载后打开文件提示:文件损坏是否恢复,但是可以恢复我是直接使用FileInputStream读取传输的:Stringstr="attachment;...
直接使用IO读取写入,下载后打开文件提示:文件损坏是否恢复,但是可以恢复
我是直接使用FileInputStream读取传输的:
String str = "attachment;filename=";
String name="";
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
InputStream fis = null;
try {
name = java.net.URLEncoder.encode(fileName + ".xlsx","UTF-8");
response.addHeader("Content-Disposition", str + new String(name.getBytes("UTF-8"),"UTF-8"));
fis = new FileInputStream(downFile);
request.setCharacterEncoding("utf8");
byte[] bytes = new byte[1024];
while(fis.read(bytes) != -1 ) {
response.getOutputStream().write(bytes);
}
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fis != null){
try{fis.close();}catch(Exception e){}
}
} 展开
我是直接使用FileInputStream读取传输的:
String str = "attachment;filename=";
String name="";
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
InputStream fis = null;
try {
name = java.net.URLEncoder.encode(fileName + ".xlsx","UTF-8");
response.addHeader("Content-Disposition", str + new String(name.getBytes("UTF-8"),"UTF-8"));
fis = new FileInputStream(downFile);
request.setCharacterEncoding("utf8");
byte[] bytes = new byte[1024];
while(fis.read(bytes) != -1 ) {
response.getOutputStream().write(bytes);
}
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fis != null){
try{fis.close();}catch(Exception e){}
}
} 展开
4个回答
2012-03-05
展开全部
写个文件专门提供下载文件也可以,但那样对于你这种情况明显多余了,把服务器端Excel文件的MIME类型映射信息改成application/octet-stream即可。这个映射可以在web.xml中定义。
更多追问追答
追问
response.setContentType("application/octet-stream");
是这样设置吗?
追答
这么设置也可以,但是这个设置语句得在所有输出语句之前才能生效,而且还得通过代码来传输文件,我个人认为这种方式纯粹多余,在Web.xml添加 ,多方便。
展开全部
action中直接打开文件,然后输出给response的流
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-08-22
展开全部
改成byte[] b = new byte[2048];
int len;
while ((len = fis.read(b)) != -1) {
out.write(b, 0, len);
}
就没有报Excel在“XXX.xlsx”中发现不可读取的内容。是否恢复此工作簿的内容?如果信任此工作簿的来源,请点击“是”。
int len;
while ((len = fis.read(b)) != -1) {
out.write(b, 0, len);
}
就没有报Excel在“XXX.xlsx”中发现不可读取的内容。是否恢复此工作簿的内容?如果信任此工作簿的来源,请点击“是”。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不管他什么文件 都是文件不是 只不过后缀不一样 就用文件流呗 . 后缀 能截取吧 原样输出呗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询