java excel导出到用户本地

javaweb中,做的导出数据功能,数据导出的excel跑到服务器上了,没导到用户本机上,求高手解答,另外求教怎么做导出时选择导出路径的方法... javaweb中,做的导出数据功能,数据导出的excel跑到服务器上了, 没导到用户本机上,求高手解答,另外求教怎么做导出时选择导出路径的方法 展开
 我来答
nsrainbow
2013-08-16 · TA获得超过5195个赞
知道大有可为答主
回答量:2151
采纳率:0%
帮助的人:1707万
展开全部

一般来说做下载功能的确是先导到服务器的一个临时目录上的,然后再用一段代码把这个excel读出来,并且输出到response流里面去,给你一段可以用的代码

                //------------------------------
                //step1. 保存一个临时excel到temp目录下
                //------------------------------
                //这部分自己实现,我相信你已经实现了
                //假设你已经实现了保存一个excel到一个临时文件夹里面去
                //并且已经生成了一个File 指向这个临时的 excel,名叫exportFile
                
                //-------------------------------
//step2. 弹出下载对话框
//-------------------------------
if(exportFile == null){
logger.error("生成excel错误! exportFile 为空");
return;
}

//先建立一个文件读取流去读取这个临时excel文件
FileInputStream fs = null;
try {
fs = new FileInputStream(exportFile);
} catch (FileNotFoundException e) {
logger.error("生成excel错误! " + exportFile + " 不存在!",e);
return;
}
// 设置响应头和保存文件名
HttpServletResponse response = ServletActionContext.getResponse();
//这个一定要设定,告诉浏览器这次请求是一个下载的数据流
response.setContentType("APPLICATION/OCTET-STREAM");
try {
//这边的 "采购部门本月采购报表.xls" 替换成你自己要显示给用户的文件名
excelName = URLEncoder.encode("采购部门本月采购报表.xls", "UTF-8");
} catch (UnsupportedEncodingException e1) {
logger.error("转换excel名称编码错误!",e1);
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + excelName + "\"");
// 写出流信息
int b = 0;
try {
        //这里的 response 就是你 servlet 的那个传参进来的 response
PrintWriter out = response.getWriter();
while ((b = fs.read()) != -1) {
out.write(b);
}
fs.close();
out.close();
logger.debug(sheetName + " 文件下载完毕.");
} catch (Exception e) {
logger.error(sheetName + " 下载文件失败!.",e);
}


把这段代码放到你的servlet的最后一部分

追问
ServletActionContext这个方法是struts的?我用wicket做的,这个方法不能找到,是什么意思
妖精の血11
2013-08-16
知道答主
回答量:52
采纳率:0%
帮助的人:18.4万
展开全部
要导出到用户的电脑上就不叫导出了,叫做下载。路径问题也是选择下载路径就可以了。。和迅雷类似。用IO流直接将你要下载的数据写入到本地就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友60ba0a5
2013-08-16 · TA获得超过231个赞
知道小有建树答主
回答量:544
采纳率:100%
帮助的人:218万
展开全部
就是在jsp中用file标签就可以选择路径啦。然后你导出的时候你现在可能默认是在server的某个目录,你写成你页面选择的路径即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张策是gou
2013-08-16 · TA获得超过250个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:91.9万
展开全部
public void downLoadFile(String filePth) {
        HttpServletResponse response = ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
            try {
            
            //得到当前路径
            //String filePath=request.getSession().getServletContext().getRealPath(File.separator);
            File temFile = new File(filePth);
            if(!temFile.exists()){
                response.getWriter().write("ERROR:File Not Found");
                return ;
            }
            String fileName = filePth.substring(filePth.lastIndexOf(File.separator)+1);
            String browser = request.getHeader("user-agent");
            Pattern p = Pattern.compile(".*MSIE.*?;.*");
            Matcher m = p.matcher(browser);
            
            if(m.matches()){
                response.setHeader("Content-Disposition", "attachment; filename=" +URLEncoder.encode(fileName, "UTF-8").replace("+",""));
            }else{
                response.setHeader("Content-Disposition", "attachment; filename=" +new String(fileName.getBytes("UTF-8"),"ISO8859-1").replace(" ", ""));
            }
            response.setContentType("application/x-download");
            OutputStream ot=response.getOutputStream();
            BufferedInputStream bis  = new BufferedInputStream(new FileInputStream(temFile));
            BufferedOutputStream bos = new BufferedOutputStream(ot);
            byte[] buffer = new byte[4096];
            int length = 0;
            while((length = bis.read(buffer)) > 0){
                bos.write(buffer,0,length);
            }
            bos.close();
            bis.close();
            ot.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

运行效果!不懂再问!

追问
我使用这个 HttpServletResponse response = ServletActionContext.getResponse();ServletActionContext这个方法是不是struts中的,但是我没用struts开发
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式