2018-06-12 16:38

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

2018-06-12 16:09

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

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

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

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

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

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

2018-06-12 15:38

还可以做成一个 Render , 然后用的时候:
render(new ITextRender());

2018-06-12 15:36

jfinal 中的 com.jfinal.template.ext.directive.EscapeDirective.java 中有一个 escape 转义方法,可以 copy 出来直接使用

转义这个事本身并不难,照着 EscapeDirective 写个工具类就可以了

2018-06-12 15:36

一个方法搞定挺简洁,谢谢分享

2018-06-12 15:29

已修正,谢谢反馈

2018-06-12 15:28

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

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

2018-06-12 15:26

仍然是用 sql 和 jfinal 的那些 API,例如:
Db.paginate(....);

2018-06-12 15:25

@songsong123 记得搞定后回来分享一下

2018-06-12 15:25

@songsong123 去掉 sql 后面的分号, 每次只执行一条 sql
Db.update("DROP TABLE IF EXISTS `file_info`");

String sql = "CREATE TABLE 'file_info' ("
+"'id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+"'name' TEXT(200),'path' TEXT(200))");

Db.update(sql);

JDBC 可以执行,而 jfinal 下不能执行,有可能是 druid 这类第三方对中间有分号的语句可能有所保护,防止 sql 注入

还有一个办法是用纯 JDBC 的方式获取一个 DataSource,然后将这个对象传入 ActiveRecordPlugin(dataSource), 这样的话中间就没有第三方了

jfinal 数据库操作在本质上就是 JDBC

2018-06-12 10:40

这个思路很有创意,感谢你的分享

2018-06-12 10:09

代码、 sql 、异常信息一样都没有, 神仙也难猜了

2018-06-12 10:09

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

2018-06-11 21:53

@JFinal 有可能是 JDBC 驱动的 bug ,无法反射得出 uuid 这个字段名,升级一下 JDBC 驱动试试

2018-06-11 21:52

@aqiang 改成别的字段名呢? 例如改成 aaa 试一下