由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。
由于想要实现下载的文件可以进行选择,而不是通过<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实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。的更多相关文章
- 利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类
利用HttpWebRequest模拟表单提交 1 using System; 2 using System.Collections.Specialized; 3 using System.IO; ...
- firefox浏览器中 bootstrap 静态弹出框中select下拉框不能弹出(解决方案)
问题出现场景1: 在firefox浏览器中在bootstrap弹出的modal静态框中再次弹出一个静态框时 select下拉框不能弹出选项 解决方案:去掉最外层静态框的 tabindex=" ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- c# 模拟表单提交,post form 上传文件、数据内容
转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...
- ajax模拟表单提交,后台使用npoi实现导入操作 方式二
页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...
- ajax模拟表单提交,后台使用npoi实现导入操作 方式一
页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...
- 浏览器下载/导出文件 及jQuery表单提交
1 比如以下按钮, 用于导出文件,如EXCEL文件. <li> <button class="whiteBg btn2" onclick="doExp( ...
- Netty学习笔记(一):接收nodejs模拟表单上传的文件
好久不写博客了,也好久不写代码了,这两天临时遇上一个事情,觉得不难,加上觉得手有些生,就动手做了一下,结果遇上了不少坑,有新坑,有老坑,痛苦无比,现在总算差不多了,赶紧记录下来,希望以后不再重复这种痛 ...
- MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求
假如有一个数据表格UserInfo: public class UserInfo { public int Id { get; set; } public string Name { get; set ...
随机推荐
- 一个seq_file的小问题
在修改一个内核模块的时候,我们使用seq_file来打印我们的数据,结果非常出人意料. static void flowinfo_seq_printf_stats(struct seq_file *s ...
- 二叉堆复习(包括d堆)
要期中考了……我真的是什么也不会啊,书都没看过TAT. 好吧整理一下二叉堆,这里就以最大堆为例好了. 首先二叉堆其实是一棵CBT,满足父节点的键值大于左右子节点的键值(wikipedia把这个叫键值, ...
- sp_executesql 或者 EXECUTE 执行动态sql的权限问题
当 sp_executesql 或 EXECUTE 语句执行字符串时,字符串将作为它的自包含批处理执行.SQL Server 会将字符串中的一个或多个 Transact-SQL 语句编译为独立于批处理 ...
- 吴裕雄 10-MySQL插入数据
语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( ...
- 微服务之间的调用(Ribbon与Feign)
来源:https://blog.csdn.net/jrn1012/article/details/77837658 使用Eureka作为服务注册中心,在服务启动后,各个微服务会将自己注册到Eureka ...
- XML 可扩展标记语言
因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等.XML是一种对独立于任何编程语言的数据进行编码的机制.在数据 交换领域,正在变得非常流行!因为他的基于节点的存储 ...
- JAVA回文
package huiwen; import java.util.Scanner; public class Huiwen { public static void main(String[] arg ...
- kubectl windows
https://storage.googleapis.com/kubernetes-release/release/v1.10.3/bin/windows/amd64/kubectl.exe
- room 二分图最大匹配KM
#include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f #define fio ...
- zxing解析带logo二维码会报com.google.zxing.NotFoundException
参考原文:https://blog.csdn.net/cyl1226541/article/details/70557232 //复杂模式,开启PURE_BARCODE模式(☆☆☆) HINTS.pu ...