请教各位大神,js发送请求到后台,弹出另存为对话框

NANJIANGBO 2016-11-19 02:31:18
弹出的另存为可以把网页的表单数据已xls的格式默认下载,应该怎么实现啊。希望给个完整点的答案了
...全文
654 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
NANJIANGBO 2016-11-28
  • 打赏
  • 举报
回复
public Result execute(HttpServletRequest request, HttpServletResponse response, String date) { Result result = new Result(); // 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); HSSFFont font = wb.createFont(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet("订单详情" + date); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short HSSFRow row = sheet.createRow((int) 0); // 第四步,创建单元格,并设置值表头 设置表头居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 HSSFCell cell = row.createCell((short) 0); cell.setCellValue("订单序号"); cell.setCellStyle(style); cell = row.createCell((short) 1); cell.setCellValue("订购的食物"); cell.setCellStyle(style); cell = row.createCell((short) 2); cell.setCellValue("订购的份数"); cell.setCellStyle(style); cell = row.createCell((short) 3); cell.setCellValue("订单金额"); cell.setCellStyle(style); cell = row.createCell((short) 4); cell.setCellValue("下单时间"); cell.setCellStyle(style); cell = row.createCell((short) 5); cell.setCellValue("顾客名"); cell.setCellStyle(style); cell = row.createCell((short) 6); cell.setCellValue("顾客手机号"); cell.setCellStyle(style); cell = row.createCell((short) 7); cell.setCellValue("顾客地址"); cell.setCellStyle(style); cell = row.createCell((short) 8); cell.setCellValue("派送员"); cell.setCellStyle(style); cell = row.createCell((short) 9); cell.setCellValue("付款状态"); cell.setCellStyle(style); cell = row.createCell((short) 10); cell.setCellValue("订单日期"); cell.setCellStyle(style); cell = row.createCell((short) 11); cell.setCellValue("备注"); cell.setCellStyle(style); // 第五步,写入实体数据 实际应用中这些数据从数据库得到 //当天所有营收情况 List<Indent> list = indentService.findBydate(date); for (int i = 0; i < list.size(); i++) { row = sheet.createRow((int) i + 1); // 第四步,创建单元格,并设置值 row.createCell((short) 0).setCellValue(list.get(i).getOrder_id()); List<Detail> detail = detailService.loadToDetail(list.get(i).getOrder_id()); for(int j=0;j<detail.size();j++){ row.createCell((short) 1).setCellValue(detail.get(j).getFood_name()); row.createCell((short) 2).setCellValue(detail.get(j).getFood_amount()); } row.createCell((short) 3).setCellValue(list.get(i).getOrder_money()); row.createCell((short) 4).setCellValue(list.get(i).getOrder_time()); row.createCell((short) 5).setCellValue(list.get(i).getUser_name()); row.createCell((short) 6).setCellValue(list.get(i).getUser_telephone()); row.createCell((short) 7).setCellValue(list.get(i).getUser_address()); row.createCell((short) 8).setCellValue(list.get(i).getDispatcher()); row.createCell((short) 9).setCellValue(list.get(i).getPayment()); row.createCell((short) 10).setCellValue(list.get(i).getDate()); row.createCell((short) 11).setCellValue(list.get(i).getRemark()); } byte[] b= new byte[1024]; int len = 0; // 第六步,将文件存到指定位置 try { String path = request.getServletContext().getRealPath("/file/excel"); //存储路径 File file=new File(path); //文件名 File fil = new File(file+"/"+date+".xls"); //判断文件是否 if (!fil.exists()) { try { fil.createNewFile(); } catch (Exception e) { } } String filename = fil.getName(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); OutputStream out = response.getOutputStream(); wb.write(out); out.flush(); result.setStatus(0); result.setMsg("成功"); return result; } catch (Exception e) { } return result; } 不会弹出下载框,是哪里写错了啊
NANJIANGBO 2016-11-28
  • 打赏
  • 举报
回复
直接就这么写吗hssfworkbook.write(response.getOuputStream()),还需要设置什么吗?如果是用ajax发送到后台也可以这么返回码
NANJIANGBO 2016-11-28
  • 打赏
  • 举报
回复
引用 13 楼 shuyin007 的回复:
response.setContentType("application/vnd.ms-excel"); String downloadFileName = new String(fileName.getBytes("gb2312"), "iso8859-1"); response.setHeader("Content-disposition", "attachment;filename=" + downloadFileName);
文件名转码吗
shuyin007 2016-11-28
  • 打赏
  • 举报
回复
response.setContentType("application/vnd.ms-excel"); String downloadFileName = new String(fileName.getBytes("gb2312"), "iso8859-1"); response.setHeader("Content-disposition", "attachment;filename=" + downloadFileName);
NANJIANGBO 2016-11-25
  • 打赏
  • 举报
回复
那个 fileName = tanmiUserTaskService.fileNameOfUserTaskExcel(searchStr,searchType,userTaskState);直接这样取吗?前端如果用ajax是不是不能用response返回文件
从小就很呆 2016-11-25
  • 打赏
  • 举报
回复
引用 3 楼 u011320740 的回复:
你后台处理生成的excel以流的方式输出到浏览器,比如你把你创建好的hssfworkbook.write(response.getOuputStream())
这个方法可以
_南天北落 2016-11-23
  • 打赏
  • 举报
回复
	//文件下载 2016.10.20
	$('#downloadfile').click(function() {
		var searchType = $('#searchType').combobox('getValue');
		var searchStr = $('#searchStr').textbox('getText').trim();
		var userTaskState = $('#userTaskState').combobox('getValue');
		
		var form = $("<form>");
			form.attr('style', 'display:none');
			form.attr('target', '');
			form.attr('method', 'post');
			form.attr('action', "${pageContext.request.contextPath}/m_tasktm_usertask/downloadFile");
		
		var input1 = $('<input>');
			input1.attr('type', 'hidden');
			input1.attr('name', 'searchType');
			input1.attr('value', searchType);
			
		var input2 = $('<input>');
			input2.attr('type', 'hidden');
			input2.attr('name', 'searchStr1');
			input2.attr('value', searchStr);
		var input3 = $('<input>');
			input3.attr('type', 'hidden');
			input3.attr('name', 'userTaskState');
			input3.attr('value', userTaskState);
			$('body').append(form);
			form.append(input1);
			form.append(input2);
			form.append(input3);
		form.submit(); 
	});
String fileName = "";
    	fileName = tanmiUserTaskService.fileNameOfUserTaskExcel(searchStr,searchType,userTaskState);
    	
    	String path =Command.SYSTEM_DOWNLOAD_EXCEL+fileName+"."+Command.SYSTEM_DOWNLOAD_FILE_EXTS;
    	File file=new File(path);
    	
    	InputStream inputStream = null;  
    	OutputStream outputStream = null;
    	byte[] b= new byte[1024];
    	int len = 0;
    	try{
	    	inputStream = new FileInputStream(file);
	    	outputStream = response.getOutputStream();
	    	
	    	response.setContentType("application/force-download");
	    	String filename = file.getName();
	    	response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
	    	response.setContentLength( (int) file.length( ) );
	    	while((len = inputStream.read(b)) != -1){  
	    		outputStream.write(b, 0, len);  
	    	}
	
	    	inputStream.close();  
	    	outputStream.close();
    	}catch(Exception e){
    		System.out.println("文件下载异常:downloadFile方法");
    		e.printStackTrace();
    	}finally{
    		try {
				inputStream.close();
			} catch (IOException e) {
				System.out.println("流文件读取异常");
				e.printStackTrace();
			}
    		try {
				outputStream.close();
			} catch (IOException e) {
				System.out.println("流文件输出异常");
				e.printStackTrace();
			}
    	}
前台JS方法和后台方法。用js封装一个表单。然后发送给后台。这样实现的效果是,当用户点击按钮的时候就能实现直接下载。另存为的那种框框,而不用新弹出页面或者别的之类的。
nantong-xiaosong 2016-11-23
  • 打赏
  • 举报
回复
引用 5 楼 vswen5 的回复:
浏览器不是自带吗
差点忘了,使用response.getOutputStream(),获取output对象后,就使劲的write吧,最后刷新流对象flash(),关闭流对象close();
nantong-xiaosong 2016-11-23
  • 打赏
  • 举报
回复
骚年,加上这句:response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); 意思是让客户端(浏览器)打开下载对话框,filename为文件名,自己定义, 至于URLEncoder.encode()这个方法是解决中文乱码问题,知道这个意思就行了;
finalice 2016-11-22
  • 打赏
  • 举报
回复
try { var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息 var Shell = new ActiveXObject("Shell.Application"); //var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑 var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目录为:桌面 if (Folder != null) { Folder = Folder.items(); // 返回 FolderItems 对象 Folder = Folder.item(); // 返回 Folderitem 对象 Folder = Folder.Path; // 返回路径 if (Folder.charAt(Folder.length - 1) != "\\") { Folder = Folder + "\\"; } } } catch (e) { alert(e.message); } folder得到的是 另存为路径,然后你将这个路径传入后台,再以流的方式输出到这个folder指定路径。
vswen5 2016-11-22
  • 打赏
  • 举报
回复
浏览器不是自带吗
NANJIANGBO 2016-11-21
  • 打赏
  • 举报
回复
那是直接下载,不弹窗吗?
菜 头 2016-11-21
  • 打赏
  • 举报
回复
你后台处理生成的excel以流的方式输出到浏览器,比如你把你创建好的hssfworkbook.write(response.getOuputStream())
rumlee 2016-11-20
  • 打赏
  • 举报
回复
js打开一个链接,这个连接后台直接就是下载xls文件,这样就好了。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧