renderFile文件名和参数问题

太清 发布于 2016/01/07 18:42
阅读 243
收藏 2

@JFinal 你好,想跟你请教个问题:

最近在处理文件上传下载,然后下载用了renderFile

请问,能不能自定义文件名?比如,我后台返回的File是 E:/123.xls

但是我想下载的时候,显示的是 统计表.xls

====

另,文件如果是InputStream,应该怎么写个增强的renderFile(InputStream)?

加载中
1
JFinal
JFinal

    可以通过扩展 Render 的方式来实现,先说第一个,找到FileRender下面这行代码:

response.setHeader("Content-disposition", "attachment; filename=" + encodeFileName(file.getName()));
  仿照现有的 FileRender 做一个 MyFileRender然后,把 filename= 这后面的文件名参过参数可以配置,用的时候这样用:
render(new MyFileRender(file, newFileName));
   上面的 newFileName 就是传入的新的文件名,可以随心取名。

   第二个功能,要实现下载文件时传入 InputStream,也可以通过扩展的方式,然后 render() 方法中改成类似下面的形式:

outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
for (int len=-1; (len=this.inputStream.read(buffer)) != -1;) {
  outputStream.write(buffer, 0, len);
}
outputStream.flush();

   其中第三行代码中的 this.inputStream 就是你从外部转入的参数,直接从其中读数据然后往 outputStream 中写入即可。


JFinal
JFinal
回复 @疯狂de咸蛋 : servletContext 可以通过 JFinal.me().getServletContext() 得到
SaltyEgg
SaltyEgg
你好,@JFinal , 如果新建了一个MyFileRender,怎么在renderFactory里面注册一下?不然servletContext为null。 多谢
返回顶部
顶部