renderFile

@波总

 用renderFile 下载文件说的时候,,每次客户端下载一次,为啥服务器上也会下载一次,怎么样取消服务器端的下载

评论区

JFinal

2018-06-12 10:09

到底是在哪里下载的? 如果你在客户端操作下载这个动作, 那么什么叫做服务端下载了一次?

hankingxu

2018-06-12 14:52

@JFinal 我实在客户端下载这个文件,但是我在服务器端Tomcat bin目录下发现,我每次下载一个文件在bin中都有相应的下载。。

hankingxu

2018-06-12 15:13

@JFinal 我发现问题了,renderFile时候,新建了 file = new File(shipname+rep+".xls"); ,,是不是renderFlie的时候,必须新建file,,这样在服务器端就会建立个同样的文件。。怎么办

JFinal

2018-06-12 15:28

@hankingxu 这个不是本质问题, 如果你只是 new File(...) ,但并没有往 FileOutputStream 这种流里面写东西,文件仍然是不会创建的

无论如何,jfinal 是不会帮你创建下载文件的,仔细查看一下自己的相关代码

hankingxu

2018-06-12 15:48

@JFinal 嗯嗯,说的有道理,我每次下载的文件,都是根据数据库最新数据生成的,所以我每次下载的时候,都会新建一个file 然后往里面写东西,然后下载,导致了服务器有好多下载文件,,怎么样才能新建file 的时候,可以往里面写东西,然后下载,实际上不会在服务器端生成文件。。

JFinal

2018-06-12 16:09

@hankingxu 照着 jfinal 的 FileRender 做一个 MyFileRender 出来即可,大致方法如下:
1: 先拷贝 FileRender 中所有的代码到 MyFilRender 中去

2:删掉 rangeRender() 这个方法(这个是用于断点续传的)

3:关键点在于改造 normalRender() 方法中的new BufferedInputStream(...) , 将原来的从 FileInputStream 中读取数据改成从你数据来源的那个流里面读取。

这样做的好处就是可以避免掉你以往的构建实体文件的环节

当然,上面是主要过程,里头可能有一些小细节,都不重要了

记得搞定后,回来在分享频道分享出来

JFinal

2018-06-12 16:38

@hankingxu 最后在使用的时候这样来用:
render(new MyFileRender(...));

热门反馈

扫码入社