由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。

1.html代码:

<a class="mini-button" iconCls="icon-edit" onclick="output()">导出</a> 

2.JQuery代码:

 <script type="text/javascript">
mini.parse(); var grid = mini.get("datagrid1");
grid.load();
grid.sortBy("createtime", "desc");
function output() {
var rows = grid.getSelecteds();
if (rows.length > 0) {
if (confirm("确定导出选中记录?")) {
var ids = [];
for (var i = 0, l = rows.length; i < l; i++) {
var r = rows[i];
ids.push(r.id);
}
var id = ids.join(',');
grid.loading("操作中,请稍后......");
          //=====================================================
//模拟表单提交同步方式下载文件,能够弹出保存文件对话框
var url="/admin/xtsjgl/xtsjgl/outputXtsj";
var form=form = $("<form></form>").attr("action", url).attr("method", "post");
form.append($("<input></input>").attr("type", "hidden").attr("name", "data").attr("value", id));
form.appendTo('body').submit().remove();
            //=======================================================
grid.reload();
}
} else {
alert("请选中一条记录");
}
}

标出的代码就是通过在JQuery中模拟表单同步方式提交,可以触发浏览器的下载文件弹出框。这样可以动态设定访问的controller函数以及向后台传的下载文件的参数信息。我这里的代码是获取选中记录的id,将id值传到后台,后台在根据id查找文件所在的路径,进行下载。

3.后台contoller代码

//导出协同数据记录
public void outputXtsj() { // 上传的基本路径
String baseUploadPath = BaseConfig.baseUploadPath;
//renderFile("201903310213.xls");
String data = getPara("data");
System.out.println("导出记录的id:"+data);
String[] ids=data.split(",");
for(int i=0;i<ids.length;i++) { int id=Integer.parseInt(ids[i]);
//数据文件名
String sjfile=xtsjglService.outputXtsj(id);
// 在存储目录下找到需要下载的文件
String sjfilePath = "WebContent/" + baseUploadPath + "xtfile/" + sjfile;
System.out.println("文件存在的路径" + sjfilePath);
File file = new File(sjfilePath);
Boolean sjfileDel = false; System.out.println("文件是否存在:"+file.exists());
if (file.exists()) {
System.out.println("文件下载执行了");
renderFile(file);
}
} //renderNull();
}

JFinal框架只需要一句话就可以实现文件的下载:renderFile(File file)。找到需要下载的文件,如果文件存在则进行下载。

关于JFinal文件下载的一些说明:

JFinal下载的文件不一定要求在me.setBaseDownloadPath("download/");配置的下载文件路径下,只要是能够在其他路径下找找到的文件均可以实现下载,所以也就是说如果我们想要下载的文件不再配置的路径下就要查找到文件的完整路径然后在进行下载,如果下载文件在配置的路径下,只用写下载文件的文件名就可以实现下载。另一方面也说明了不一定非要在config中配置下载路径,也就是写这句话:me.setBaseDownloadPath("download/");

这只是我的一些个人看法,如果有不同的看法欢迎探讨。

由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。的更多相关文章

  1. 利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类

    利用HttpWebRequest模拟表单提交   1 using System; 2 using System.Collections.Specialized; 3 using System.IO; ...

  2. firefox浏览器中 bootstrap 静态弹出框中select下拉框不能弹出(解决方案)

    问题出现场景1: 在firefox浏览器中在bootstrap弹出的modal静态框中再次弹出一个静态框时 select下拉框不能弹出选项 解决方案:去掉最外层静态框的 tabindex=" ...

  3. c# 模拟表单提交,post form 上传文件、大数据内容

    表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...

  4. c# 模拟表单提交,post form 上传文件、数据内容

    转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...

  5. ajax模拟表单提交,后台使用npoi实现导入操作 方式二

    页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...

  6. ajax模拟表单提交,后台使用npoi实现导入操作 方式一

    页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...

  7. 浏览器下载/导出文件 及jQuery表单提交

    1 比如以下按钮, 用于导出文件,如EXCEL文件. <li> <button class="whiteBg btn2" onclick="doExp( ...

  8. Netty学习笔记(一):接收nodejs模拟表单上传的文件

    好久不写博客了,也好久不写代码了,这两天临时遇上一个事情,觉得不难,加上觉得手有些生,就动手做了一下,结果遇上了不少坑,有新坑,有老坑,痛苦无比,现在总算差不多了,赶紧记录下来,希望以后不再重复这种痛 ...

  9. MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求

    假如有一个数据表格UserInfo: public class UserInfo { public int Id { get; set; } public string Name { get; set ...

随机推荐

  1. Centos7升级新内核

    由于觉得Centos7内核版本还不够高,就想升级下,下面是升级步骤 我使用的方法是使用yum升级内核 使用第三方仓库升级 CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新 ...

  2. week5 0.1 安装materializecss

    用ATOM打开项目 App是什么呢?就是App.js 我们将不需要的删掉 用一下materialize(类似bootstrap的东西) 官网https://materializecss.com/ 想用 ...

  3. powerdesiner技巧

    1.name和code同步问题和name成comments http://blog.csdn.net/huang_xw/article/details/5722981 2.连接数据库

  4. 使用 Asp.Net Response.Write() 制作实时进度条

    准备: 一个 StudyResponse.aspx 页面和 CodeBehind 文件. Web 页面中的内容如下: <%@ Page Language="C#" AutoE ...

  5. 使用firefox插件httperrequest,模拟发送及接收Json请求 【转】

    转自[http://blog.csdn.net/feixue1232/article/details/8535212] 目标:使用httpreques\Json-Handle\tcpdump\wire ...

  6. nginx优化——包括https、keepalive等

    一.nginx之tcp_nopush.tcp_nodelay.sendfile 1.TCP_NODELAY你怎么可以强制 socket 在它的缓冲区里发送数据?一个解决方案是 TCP 堆栈的 TCP_ ...

  7. @JsonInclude注解,RestTemplate传输值为null的属性,利用FastJson将属性中有空值null的对象转化成Json字符串

    一个pojo类: import lombok.Data; @Data public class Friend { private String name; private int age; priva ...

  8. 实例的render方法渲染组件

    1.普通渲染组件 在app容器中插入login组件 <login></login>  一个app可以多个这种组件 <script> var login = { te ...

  9. ADO.Net 数据库增加

    数据库增加数据其实就是把查询语句换成了增加语句,后面执行语句用操作变量点出一个执行方法 cmm.ExecuteNonQuery();//关键语句,执行CommandText,的SQL语句,增删改都用这 ...

  10. CSS样式表的写作规范

    推荐大家使用的CSS书写规范.顺序 写了这么久的CSS,但自己都没有按照良好的CSS书写规范来写CSS代码,东写一段西写一段,命名也是想到什么写什么,过一段时间自己都不知道写的是那一块内容, 这样会影 ...