关于dwr文件下载问题,它有专门的文件流处理类型FileTransfer,这的类型在dwr上巨好用,它能提供很好的操作文件流的方法。要将文档下载到客户端,只要在服务器端组织好所需下载的数据,转成文件流FileInputStream,然后调用它的方法将内容传到前台,js里只需要短短的一行代码它就能下载了,下面分别来看看前后端的代码。
return new FileTransfer(new String("文件名","ISO-8859-1"), "application/msexcel", file.length()(文件长度),文件流(FileInputStream))
dwr.engine.openInDownload(bak);
关于参数bak是方法的返回值,只需要在方法的回调里面加上这一句,你所要的文档就能下载了。
还有个地方值得说一下的是,在后台组织完数据怎么将它转成文件流的形式,我这里是组织起来的数量(Map)写到服务器存起来,然后在去将它读出来,这样不仅顺利的转成ileInputStream了,还能对下载数据有一个缓存、存档的作用,而且取长度也很容易了。
这只是我了解到的一个方法,可能还有很多的好方法,先记录下来方便以后学习。
return new FileTransfer(new String("文件名","ISO-8859-1"), "application/msexcel", file.length()(文件长度),文件流(FileInputStream))
这几个参数都很明显第一个参数文件名之所以要用ISO-8859-1是因为导出的中文问题,我自己尝试过用这个字符集不会乱,第二个参数导出类型,导出xls时用这个,导txt用"application/text",后面两个没什么好说的。
dwr.engine.openInDownload(bak);
关于参数bak是方法的返回值,只需要在方法的回调里面加上这一句,你所要的文档就能下载了。
还有个地方值得说一下的是,在后台组织完数据怎么将它转成文件流的形式,我这里是组织起来的数量(Map)写到服务器存起来,然后在去将它读出来,这样不仅顺利的转成ileInputStream了,还能对下载数据有一个缓存、存档的作用,而且取长度也很容易了。
这只是我了解到的一个方法,可能还有很多的好方法,先记录下来方便以后学习。