6
回答
web应用利用POI导出Excel,下载路径为何?
终于搞明白,存储TCO原来是这样算的>>>   

问题描述(java相关)

1.这个是java开发的web应用程序,利用POI导出Excel

2.比如在路径C:\excel\   下生成了名为"销售.xls"的Excel表。路径(C:\excel\销售.xls)

3.当我点击导出按钮时,页面会弹出一个下载链接,问题是这个链接地址应该怎么给呢

求各位大哥大姐指教,感恩

举报
稻草鸟人
发帖于5年前 6回/5K+阅

以下是问题补充:

  • @稻草鸟人 :我现在是用JQuery的dialog弹出对话框,然后在这个对话框里面给了一个链接,比如:C:\excel\销售.xls ,但是这样只能用IE,而且只能是右击另存为...感觉这样很不好~哪位大哥,给点建议呢 (5年前)
  • @稻草鸟人 :已经好了,解决方法 1.之前生成的路径是在C盘下的某某文件夹下,现在改成在 request.getSession().getServletContext().getRealPath("/excel") + File.separator 这样的话就可以再tomcat下的webapps/excel下产生文件了 2.然后返回到页面的链接可以写成这样 “/项目名/excel/文件名” 3.谢谢各位 (5年前)
共有6个答案 最后回答: 5年前

导出的excel  不能放到 web 应用目录下么,尽量不要使用绝对的系统路径 ,用web 应用路径。

然后通过 request.getSession().getServletContext().getRealPath("/") 获得 你的excel  ,下载就可以呀

一种是在服务器端配置别名xx 映射到C:\excel\目录,现在连接就是domain/xx/file

一种是写个下载的程序,url不变 参数不同,用来做下载。 如:domain/download.do?file=xx,

引用来自“roockee”的答案

一种是在服务器端配置别名xx 映射到C:\excel\目录,现在连接就是domain/xx/file

一种是写个下载的程序,url不变 参数不同,用来做下载。 如:domain/download.do?file=xx,

映射是怎么弄的?

引用来自“钱钱磊”的答案

导出的excel  不能放到 web 应用目录下么,尽量不要使用绝对的系统路径 ,用web 应用路径。

然后通过 request.getSession().getServletContext().getRealPath("/") 获得 你的excel  ,下载就可以呀

有没有办法直接给个超级链接啊..

引用来自“mars.ma”的答案

引用来自“钱钱磊”的答案

导出的excel  不能放到 web 应用目录下么,尽量不要使用绝对的系统路径 ,用web 应用路径。

然后通过 request.getSession().getServletContext().getRealPath("/") 获得 你的excel  ,下载就可以呀

有没有办法直接给个超级链接啊..

点击导出生成excel并下载就好了呀,给你段 代码参考下

 
上面是生成excel 代码  。。
String outputFileName = null;       
			String destFilePath = request.getSession().getServletContext().getRealPath("/")+"excel_template/";
			String destFile = "";//输入文件路径 
			outputFileName = "销售";
                        outputFileName = outputFileName + ".xls"; 
 			destFile = destFilePath + "bjqktj_data.xls";  // 你的 excel 文件
			// 下载文件
			if (destFile != null && destFile.trim().length() > 0) {
				byte buff[] = new byte[512];
				int nLen = 0;
				FileInputStream fis = null;
				OutputStream sos = null;
				File file = null;
				try {
					file = new File(destFile);
					fis = new FileInputStream(file);
					response.setContentLength((int) file.length());
					response.setContentType("application/octet-stream");
					response.setHeader("name", destFile);
					response.setHeader("Content-disposition",
							"attachment; filename=\""
									+URLEncoder.encode(outputFileName, "UTF-8")+ "\""); //
					sos = response.getOutputStream();
					sos.flush();
					while ((nLen = fis.read(buff)) > 0) {
						sos.write(buff, 0, nLen);
					}
					sos.flush();
					sos.close();  
				}catch (IOException ioex) {
					throw ioex;
				} finally {
					try {
						if (fis != null) {fis.close();}
					} catch (Exception exception1) {
					}
					try {
						if (sos != null) {sos.close();}
					} catch (Exception exception2) {
					}
					file = null; 
					//response.getWriter().print("{success:true}");
				}
			}

--- 共有 1 条评论 ---
稻草鸟人非常感谢 5年前 回复

引用来自“钱钱磊”的答案

引用来自“mars.ma”的答案

引用来自“钱钱磊”的答案

导出的excel  不能放到 web 应用目录下么,尽量不要使用绝对的系统路径 ,用web 应用路径。

然后通过 request.getSession().getServletContext().getRealPath("/") 获得 你的excel  ,下载就可以呀

有没有办法直接给个超级链接啊..

点击导出生成excel并下载就好了呀,给你段 代码参考下

 
上面是生成excel 代码  。。
String outputFileName = null;       
			String destFilePath = request.getSession().getServletContext().getRealPath("/")+"excel_template/";
			String destFile = "";//输入文件路径 
			outputFileName = "销售";
                        outputFileName = outputFileName + ".xls"; 
 			destFile = destFilePath + "bjqktj_data.xls";  // 你的 excel 文件
			// 下载文件
			if (destFile != null && destFile.trim().length() > 0) {
				byte buff[] = new byte[512];
				int nLen = 0;
				FileInputStream fis = null;
				OutputStream sos = null;
				File file = null;
				try {
					file = new File(destFile);
					fis = new FileInputStream(file);
					response.setContentLength((int) file.length());
					response.setContentType("application/octet-stream");
					response.setHeader("name", destFile);
					response.setHeader("Content-disposition",
							"attachment; filename=\""
									+URLEncoder.encode(outputFileName, "UTF-8")+ "\""); //
					sos = response.getOutputStream();
					sos.flush();
					while ((nLen = fis.read(buff)) > 0) {
						sos.write(buff, 0, nLen);
					}
					sos.flush();
					sos.close();  
				}catch (IOException ioex) {
					throw ioex;
				} finally {
					try {
						if (fis != null) {fis.close();}
					} catch (Exception exception1) {
					}
					try {
						if (sos != null) {sos.close();}
					} catch (Exception exception2) {
					}
					file = null; 
					//response.getWriter().print("{success:true}");
				}
			}

倾向使用这种方法
--- 共有 1 条评论 ---
稻草鸟人谢谢啊~~ 5年前 回复
顶部