`
kjkhi
  • 浏览: 184830 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS中使用jspSmartUpload实现文件下载

阅读更多
项目需求:使用Ext的GridPanel实现文件下载功能!如

首先,在gridpanel中加入链接style的button。在gridpanel的ColumnModel中
renderer:function(){return "<p><button type='submit' class='link' onclick='downloadfile("+v+")'><span>下载</span></button></p>"}

加入button style。
button.link {
			font-family: "Verdana" sans-serif;
			font-size: 1em;
			text-align: left;
			color: blue;
			background: none;
			margin: 0;
			padding: 0;
			border: none;
			cursor: pointer;
		}

其下载任务,都在downloadfile(v)这个方法中实现,代码
downloadfile = function(v){
				Ext.Ajax.request({
					url:"getFilePath_fileIO",
					params:{"fileId":v},
					success:function(response){
						var fileJson = Ext.decode(response.responseText);

						var filepath = encodeURIComponent(fileJson.filepath);
						var filename = encodeURIComponent(fileJson.filename);
						window.open("downloadfile.jsp?filepath="+filepath+"&filename="+filename,"_self");
					},
					failure:function(response){
					
					}
				});
			}

在downloadfile.jsp页面中,使用jspSmartUpload提供的API实现下载。
	String filepath = request.getParameter("filepath");
	String filename = request.getParameter("filename");
	filepath = filepath.replace("/","\\");
	
	SmartUpload su = new SmartUpload();
	//初始化
	su.init(config);
	su.service(request,response);
	//禁止浏览器自动打开文件
	su.setContentDisposition(null);
	
	//下载文件
	String path = new String(filepath.getBytes("ISO8859-1"),"UTF-8");
	String name = new String(filename.getBytes("ISO8859-1"),"UTF-8");
//	System.out.print(name);	
	su.downloadFile(path,null,name);
	out.clear();
	out = pageContext.pushBody();


ps:jspSmartUpload在默认的情况,并不支持下载文件名为中文的。这里我们需要做一些编码的转换,在SmartUpload中加入toUtf8String(String)这个方法,如
  public static String toUtf8String(String s)
  {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);
      if ((c >= 0) && (c <= 'ÿ')) {
        sb.append(c); } else {
        byte[] b;
        try {
          b = Character.toString(c).getBytes("utf-8");
        }
        catch (Exception ex)
        {
          byte[] b;
          System.out.println(ex);
          b = new byte[0];
        }
        for (int j = 0; j < b.length; j++) {
          int k = b[j];
          if (k < 0)
            k += 256;
          sb.append("%" + Integer.toHexString(k).toUpperCase());
        }
      }
    }
    return sb.toString();
  }

修改SmartUpload中downloadFile(String s, String s1, String s2, int i)这个方法,如
public void downloadFile(String s, String s1, String s2, int i)
    throws ServletException, IOException, SmartUploadException
  {
    if (s == null)
      throw new IllegalArgumentException("File '" + s + 
        "' not found (1040).");
    if (s.equals(""))
      throw new IllegalArgumentException("File '" + s + 
        "' not found (1040).");
    if ((!isVirtual(s)) && (this.m_denyPhysicalPath))
      throw new SecurityException("Physical path is denied (1035).");
    if (isVirtual(s))
      s = this.m_application.getRealPath(s);
    java.io.File file = new java.io.File(s);
    FileInputStream fileinputstream = new FileInputStream(file);
    long l = file.length();
    boolean flag = false;
    int k = 0;
    byte[] abyte0 = new byte[i];
    if (s1 == null)
      this.m_response.setContentType("application/x-msdownload");
    else if (s1.length() == 0)
      this.m_response.setContentType("application/x-msdownload");
    else
      this.m_response.setContentType(s1);
    this.m_response.setContentLength((int)l);
    this.m_contentDisposition = (this.m_contentDisposition != null ? this.m_contentDisposition : 
      "attachment;");
    if (s2 == null)
      this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + 
        " filename=" + toUtf8String(getFileName(s)));
    else if (s2.length() == 0)
      this.m_response.setHeader("Content-Disposition", this.m_contentDisposition);
    else
      this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + 
        " filename=" + toUtf8String(s2));
    while (k < l) {
      int j = fileinputstream.read(abyte0, 0, i);
      k += j;
      this.m_response.getOutputStream().write(abyte0, 0, j);
    }
    fileinputstream.close();
  }

这样,基本上能够实现对中文名文件的下载!
分享到:
评论
2 楼 xlshl43 2013-09-03  
还是自己创建表单来的放心,什么错都没有
1 楼 李成林_89 2012-02-24  
学习学习~~~

相关推荐

    commons.fileupload和jspSmartUpload文件上传和ExtJS前后台原代码

    2、有用jspSmartupload制作一个文件上传和下载的例子,其制作的例子能够上传到数据库中; 3、还用ExtJS制作的多文件同时上传的例子,后台也是用Servlet处理。 4、用Servlet要注意web.xml映射的配置。

    ExtJS实现文件下载

    在本文中,我们将深入探讨如何使用ExtJS框架来实现文件下载功能。ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序,它提供了丰富的组件和功能,包括与服务器的交互,如文件下载。 首先,我们要了解`...

    Extjs下/HTML下的文件下载(另存为的弹出)

    在Extjs中实现文件下载,通常会涉及到事件监听、Ajax请求以及浏览器的Blob对象和URL.createObjectURL方法。 1. **事件监听**:在Extjs中,我们可以在按钮或其他控件上设置监听器,当用户点击时触发相应的下载操作。...

    extjs+swfupload实现多文件上传下载删除带进度条

    整个过程中,`ExtJS`和`SwfUpload`的结合使用,使得前端界面具有良好的用户体验,多文件选择和进度条显示提升了交互性,而服务器端的处理确保了数据的安全性和稳定性。这样的解决方案在早期HTML5支持不完善的时期...

    .net+Extjs 实现文件的上传下载

    在.NET和ExtJS框架下实现文件的上传与下载是一项常见的任务,这涉及到Web应用程序与用户交互的核心功能。这里,我们将深入探讨如何利用这两个技术来构建这样的功能。 首先,.NET框架,尤其是ASP.NET,提供了丰富的...

    EXTJS 多文件上传

    `MultiFileUploadField.js` 文件是EXTJS框架中实现`MultiFileUploadField` 功能的具体代码,它可能包含了组件的定义、事件处理函数、上传逻辑等。通过阅读和理解这个文件,开发者可以更深入地了解EXTJS如何处理多...

    Extjs2.x 实现文件上传组件

    在ExtJS 2.x版本中,实现文件上传组件是一项常见的需求,它允许用户在Web应用中选择并上传本地文件到服务器。在本文中,我们将深入探讨如何在ExtJS 2.x中实现这一功能。 首先,我们需要理解ExtJS中的FormPanel组件...

    Extjs+Struts2实现异步文件上传

    网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。

    ExtJS验证上传文件类型

    ExtJS 中实现文件上传功能是非常方便的,但对于新手来说,控制文件上传类型是一个难题。例如,我们只想让用户上传特定的文件类型,例如txt文件,那么如何实现当用户上传非txt文件时,给出错误提示呢?这篇文章将详细...

    jSP+EXTJS实现upload

    在IT行业中,网页开发经常会遇到文件上传的需求,而"jSP+EXTJS实现upload UploadDialog"就是一种常见的解决方法。这个话题主要涵盖了两个关键部分:JavaServer Pages (JSP) 和 ExtJS,它们共同用于创建一个具有文件...

    extjs+dwr3.0实现文件上传

    在“EXTJS+DWR3.0实现文件上传”这个主题中,我们将探讨如何结合这两者来实现一个高效且用户友好的文件上传功能。在实际的Web应用中,文件上传是一个常见的需求,例如在社交媒体平台上传图片、在文档分享网站上传...

    extjs中本地照片预览、blob数据在oracle中存取

    此压缩包中完全能实现的功能是在extjs中让本地照片预览,并且将地址传递给java后台,将图片文件以blob的形式存储到oracle数据库,并且可以默认将数据库中的数据第一次加载在预览框里(也就是从数据库中读出blob数据...

    ExtJS原生多文件拖动上传组件

    ExtJS原生多文件拖动上传组件 使用时修改包路径 1.多文件上传 2.支持拖动上传 3.支持图片压缩 4.支持图片合并 5.文件排序 可扩展实时图片预览 api //初始化画板 initCanvas //上传文件窗口 uploadWindow //初始化...

    Extjs配置文件和示例文件

    通过理解和使用这些配置文件、示例JSP和js程序,开发者可以深入理解ExtJS的工作原理,掌握如何配置和构建复杂Web应用程序。同时,这也是一个很好的起点,对于初学者来说,通过实践这些示例,能够快速提升ExtJS的开发...

    Extjs+java+swf多文件上传进度条显示项目

    这个项目利用了Extjs库来构建用户界面,Java作为服务器端语言处理业务逻辑,而SWF(Shockwave Flash)插件则用于实现文件上传过程中的动态进度条展示。 1. **Extjs**:Extjs是一个强大的JavaScript框架,用于构建富...

    ExtJs3.3中文API.CHM_extjs3.3中文文档_

    ExtJS是一个广泛使用的JavaScript库,专门用于构建富客户端应用程序。版本3.3是该库的一个稳定版本,提供了许多功能和组件,使得Web开发者能够创建功能丰富的、交互性强的用户界面。这个“ExtJS3.3中文API.CHM”文档...

    SWFUpload_extjs4_jsp_等支持多个语言的文件批上传Demo(内附v2.5.0中文说明文档)

    SWFUpload是一个强大的JavaScript库,它允许在网页中实现文件的批量上传功能,尤其适合处理大文件和多文件上传的情况。这个压缩包包含了SWFUpload与ExtJS4以及JSP的整合示例,同时支持多种语言,使得开发者可以更...

    Extjs3.3+swfUpload2.2实现多文件上传组件.pdf

    Extjs3.3+swfUpload2.2 实现多文件上传组件 Extjs3.3+swfUpload2.2 实现多文件上传组件是一种基于 Extjs3.3 和 swfUpload2.2 的文件上传解决方案。该组件可以实现多文件上传,具有良好的用户体验和可扩展性。 多...

    extjs中使用FusionChart举例

    extjs中使用FusionChart举例

    Java+Extjs实现单文件上传

    在ExtJS中,我们可以使用`Ext.form.Panel`和`Ext.form.field.File`组件实现文件上传。 1. **创建上传表单**:定义一个包含文件上传字段的表单,设置`enctype`为`multipart/form-data`。 ```javascript var form = ...

Global site tag (gtag.js) - Google Analytics