由于想要实现下载的文件可以进行选择,而不是通过<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. webpack异步加载业务模块

    虽然把我们用到的JS文件全部打包一个可以节省请求数,但如果打包后的JS文件过大,那么也容易出现白屏现象,许多操作失灵.而且一些区域是点到才出现,那么相关的JS其实可以剥离出这个大JS文件外.这就涉及到 ...

  2. 【转】WinDbg调试器:启动程序时自动连接调试器方法

    当我们调试服务进程或子进程时,无法直接用调试加载进程的方式启动,此时需要在启动程序时自动连接调试器方法: 第一步:注册表展开到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft ...

  3. Java解决输出数组问题

    package test; public class doubleshuzu { public static void main(String[] args) { double a[][]; Stri ...

  4. 编程四剑客awk

    awk  'pattern +{action}' file (1)AWK基本语法参数详解 a:单引号 ''是为了和shell命令区分开: b:大括号{}表示一个命令分组: c:pattern 是一个过 ...

  5. CSS 字体风格

    粗体 font-weight 属性可以设置文本的粗细. 它有两个属性: normal 普通粗细 bold 粗文本 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  6. 关于CSS中的浮动

    在页面布局中我们经常会用到浮动的布局,浮动元素会影响到后面页面的布局效果.例如下面: .box{ background: yellow; float: left; } .box2{ width: 20 ...

  7. DM 9000网卡驱动移植

    1. 由于内核已经带有DM9000 网卡的驱动,所以主要移植工作是在板文件中添加 platform_device 结构,并加入 ok6410_devices[] __initdata 数组. 代码如下 ...

  8. MySQL Keynote

    [MySQL Keynote] 1.Keywords may be entered in any lettercase. The following queries are equivalent: 2 ...

  9. python 文件操作: 文件操作的函数, 模式及常用操作.

    1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集") 2.模式: r , w , a , r+ , ...

  10. ucore-lab1-练习1report

    练习1 report 问题1:OS镜像文件ucore.img是如何一步一步生成的(需要比较详细地解释Makefile中的每一条相关命令和命令参数的含义,以及说明命令导致的结果)? GNU make是一 ...