各位好,最近我在做一个用JSP实现数据管理的系统。现在遇到一个自动导入导出数据数据的问题。
有一个网页是用户用来查看表数据的,上面有自动导出数据按钮,用户点击可以选择保存路径。怎么实现让用户选择保存路径这个功能呢?关键是不知道怎么弹出一个文件另存为的对话框,查了很久都没找到解决方法。最好实现文件过滤功能。保存的类型是XML. 自动导入数据的功能已经基本实现了。用<input type="file" />来做的。但是没有过滤功能。不知各位有没有更好的解决方法。谢谢!!
有一个网页是用户用来查看表数据的,上面有自动导出数据按钮,用户点击可以选择保存路径。怎么实现让用户选择保存路径这个功能呢?关键是不知道怎么弹出一个文件另存为的对话框,查了很久都没找到解决方法。最好实现文件过滤功能。保存的类型是XML. 自动导入数据的功能已经基本实现了。用<input type="file" />来做的。但是没有过滤功能。不知各位有没有更好的解决方法。谢谢!!
至于过滤,不知道是什么意思。
PS:
function SaveAs()
{
var fd = new ActiveXObject("MSComDlg.CommonDialog");
fd.Filter = "Microsoft Office Excel(*.xls)|*.xsl";
fd.FilterIndex = 2;
// 必须设置MaxFileSize. 否则出错
fd.MaxFileSize = 128;
// 显示对话框
fd.ShowSave();
}这个试过了,不知道为啥完全没反应。
网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; CIBA)
时间戳: Mon, 18 May 2009 13:47:35 UTC
消息: Automation 服务器不能创建对象
行: 198
字符: 8
代码: 0
URI: http://localhost:8080/TDMS/pages/goal.faces
导出自然是通过向输出流中写入的方式来实现,这个比导入还简单一点
不要用客户端的js来做,使用web框架或servlet
下面是一个使用servlet实现文件下载的demo,晚上时间紧没有经过测试,请见谅public class DownloadServlet extends HttpServlet{
private static final BUFFERSIZE = 1024 * 8; public void doPost(HttpServletRequest req, HttpServletResponse rep)
throws ServletException, IOException{
File file = new File("test.xml");
req.setCharacterEncoding("UTF-8");
rep.setContentType("application/x-download;charset=UTF-8");
rep.setHeader("Content-Disposition", "attachment;filename="+
new String(file.getName().getBytes(), "ISO-8859-1"));
OutputStream os = rep.getOutputStream();
InputStream is = new FileInputStream(file);
long readLength = 0;
long fileLength = file.length();
byte[] buffer = new byte[BUFFERSIZE];
while(readLength < fileLength){
int b = is.read(buffer, 0, BUFFERSIZE);
readLength += (long)b;
os.write(buffer, 0, b);
}
os.flush();
os.close();
is.close();
}
}
如:<input type="file" name="file" id="file" onBlue="checkfile()"/>
然后用JS
function checkfile()
{
var last=document.getElementById("file").value.lastIndexOf(".");
var length=document.getElementById("file").value.length;
if(document.getElementById("file").value.subString(last,length)!=".xml")
{
alert("不是XML文件");
return false;
}else
{
return true;
}
}String path=request.getParameter("file");//不就可以得到路径了么?
要得到用户保存文件的路径就有点困难了,因为文件保存在用户的磁盘上,js访问磁盘是受限的
也许在IE中使用ActiveXObject可以实现这样的功能,不建议你这样做