附件下载(包括图片,exl,word)在前台必须给出一个iframe 或者类似于window的窗口,另外,Java文件下载不能通过ajax进行请求,必须添加src属性
首选,前台的链接拼接html如下:

'<a id="attach_name'+index+'" style="width:100%" class="downloadAttach btn btn-primary"><i class="fa fa-file"></i> '+row.ATTACH_NAME+'</a>'+
'<iframe id="downloadFrame'+index+'" style="display:none;"></iframe>'

然后click事件如下:

//TODO 事件委托,下载附件按钮
$(".taskRows").on("click",".downloadAttach",function(){
var attachIndex = $(this).attr("id")//获取当前点击的元素ID
attachIndex = attachIndex.charAt(attachIndex.length-1);
var attach_name = $.trim($("#attach_name"+attachIndex).text());
alert(attach_name);
//根据附件名下载附件
if(attach_name!=null &&attach_name!=undefined)
{
//$("#downloadFrame"+attachIndex).attr("src",baseCtx+"/wpgl/downloadAttachFile.action?attachName="+attachName);
$("#downloadFrame"+attachIndex).attr("src",baseCtx+"/wpgl/downloadAttachFile.action?Id="+Id+"&attachName="+encodeURI(encodeURI(attachName)));
}
}); //action 后台一些主要的包和类 import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.net.URLDecoder;
import java.net.URLEncoder; /**
* 下载文件
* @return
* @throws UnsupportedEncodingException
*/ @Action(value="downloadAttachFile")
public String downloadAttachFile(){
  //从前台传过来的附件名字:格式是,“2006#系统测试.docx格式"
  String downloadName =wpyId+"#"+attachName;
  //传入的数据
  System.out.println(downloadName);
  try {
    OutputStream os = this.response.getOutputStream(); //OutputStream os = this.getResponse().getOutputStream();     if (Util.isIE(this.request)) //判断客户端是否为IE
    { //编码
      downloadName = URLEncoder.encode(downloadName, "UTF-8");
    }
    else
    {
      downloadName = new String(downloadName.getBytes("UTF-8"),"iso-8859-1");
    }
    //设置让浏览器弹出下载对话框的Header
    this.response.setContentType("application/x-download");
    this.response.addHeader("Content-Disposition","attachment;filename=\"" + downloadName + "\"");
    this.response.flushBuffer();
    //将前台的数据经过包装后(加了头数据,并经过编码)需要解码
    String downloadName1 =URLDecoder.decode(downloadName, "UTF-8");
    System.out.println(downloadName1);
    //解码的结果输出
    String bgFile=realPath + File.separator + downloadName1;     FileInputStream fis = new FileInputStream(bgFile);
    Util.copyStrem(fis, os);
    fis.close();
    os.close();
    System.out.println("==========成功了!!===========");
  } catch (IOException e) {   e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
  System.out.println("==========出错了!!===========");
  }   return NONE;
}

javaweb-JSP action中附件下载的写法的更多相关文章

  1. jsp action中附件下载的写法

    //一些主要的包和类 import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java ...

  2. ThinkPHP---TP功能类之附件下载

    [案例]实现公文中附件下载 (1)修改模板文件showList.html,展示列表文件信息 将数据表中的filename(原始文件名)展示到附件下 <td>{$vol.filename}& ...

  3. JSP+Servlet中使用jspsmartupload.jar进行图片上传下载

    JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...

  4. Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...

  5. jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html、jsp、servlet、action吗?是如何加载的?

    jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html.jsp.servlet.action吗?是如何加载的? 如有个test工程,其某个jsp中有个iframe,代码如下: ...

  6. struts2:JSP页面及Action中获取HTTP参数(parameter)的几种方式

    本文演示了JSP中获取HTTP参数的几种方式,还有action中获取HTTP参数的几种方式. 1. 创建JSP页面(testParam.jsp) <%@ page language=" ...

  7. struts2中怎么把action中的值传递到jsp页面

    对于如何把struts2的action中的值传到jsp页面中,主要的方法有2种: 使用转发视图利用request域中储存所需的值 使用重定向时存储数据进入session使其在jsp中可以获得 下面,让 ...

  8. jsp a标签传值到action中,action接收不到传值

    因为需求,今天在action中加了一个marker属性,尝试了很多方法 set,get方法也生成了,但是就接收不到值. 这时我注意到action中有我之前使用ajax请求数据返回json格式数据,不以 ...

  9. 将 jsp 页面的值 传到struts2 action中(不是表单中的值)

    JSP: 页面: <%@ page language="java"  pageEncoding="GBK"%> <%@taglib prefi ...

随机推荐

  1. LoadRunner系列之—-03 用Java Vuser协议编写接口测试脚本

    待测试接口用java语言实现,且项目中调用该接口需要用专门的jar包.这种情况可以用Java Vuser协议实现接口调用脚本,类似java代码. 代码样例如下: /* * LoadRunner Jav ...

  2. 【转载】企业服务总线Enterprise service bus介绍

    企业服务总线(Enterprise service bus). 以往企业已经实现了很多服务, 构成了面向服务的架构,也就是我们常说的SOA. 服务的参与双方都必须建立1对1 的联系,让我们回顾一下SO ...

  3. web.xml中的ServletContextListener

    要想了解ServletContextListener,先看看web.xml中的<listener>配置. 一)web.xml中的内容载入顺序: 首先能够肯定的是,载入顺序与它们在 web. ...

  4. linux 【第五篇】特殊权限及定时任务

    特殊权限 [root@VM_141_154_centos ~]# ls -ld /tmp drwxrwxrwt. 8 root root 4096 Apr 5 08:11 /tmp /tmp/ 公共目 ...

  5. 关于 equals()与hashcode()方法

    类重写了equals()方法也必须重写hashcode()方法,否则会导致该类无法与基于散列值的集合(HashMap.HashSet.HashTable)一起正常使用. hashcode()方法遵循的 ...

  6. 初识 flask

    1,Python现阶段三大主流web框架Django, Tornado, Flask对比 Django主要特点是大而全,集成了很多组件,列如:Models Admin Form等等,不管用得用不着反正 ...

  7. 提高比特率 有损 无损 Video-and-Audio-file-format-conversion 视频声音转码

    3 Ways to Change Bitrate on MP3 Files https://www.online-tech-tips.com/software-reviews/change-bitra ...

  8. What's the difference between jquery.js and jquery.min.js?

    They are both the same functionally but the .min one has all unnecessary characters removed in order ...

  9. mysql15--垂直分表水平分表

    分表技术(表的结构不能变) 分表技术有(水平分割和垂直分割) 当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表 以qq用户表来具体的说明一下分表的操作. 思路如图 : 首先我创建三张表 u ...

  10. GrideView(二)---删除功能

    情景一. 没有外键关联, 操作:在数据源中将删除选项选中--- GrideView 中的删除 选项选中 即可情景二. 有外键关联 *RowDeleting 行删除前触发 *RowDeleted 行删除 ...