struts2+jsp实现文件上传的方法

本文实例讲述了struts2+jsp实现文件上传的方法。分享给大家供大家参考。具体如下:

1. java代码:

package com.wang.test;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoadPhoneFile extends ActionSupport
{
  ////getDownloadFile()方法返回的必须是InputStream。getResourceAsStream()方法可以通过流的方式将资源输出
  public InputStream getDownloadFile()
  {
    return ServletActionContext.getServletContext().getResourceAsStream("/upload/UserLogin_7.27.apk");
  }
  public String execute()
  {
    return Action.SUCCESS;
  }
  /*************【Struts2的文件下载的实现方式】*********************************************/
  //如果直接写一个链接链到所要下载的文件上的话,对于有的时候,默认的会自动在浏览器里面打开
  //这种情况非常不利于我们的文件下载和权限控制。因此,我们实现文件下载时都不会采用这种方式
  //我们所采用的是标准HTTP协议的方式,输出二进制的流,导致浏览器认识这个流,它再进行文件下载
  //实际上这种方式是跟输出有关的,当点击下载链接时,会产生下载的一个信息。它是跟result有关的
  //所以就到struts-default.xml中查看<result-type/>结果类型
  //其中<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
  //事实上,这里的StreamResult类是专门用来执行文件下载的
  /*************【每一次下载文件时,控制台都会提示socket异常】***********************************/
  //报错信息为java.net.SocketException:Connection reset by peer: socket write error
  //下载本身也是socket操作,于是抛出该异常。实际上这个异常可以忽略掉。每次下载的时候,都会抛出该异常
  //在getDownloadFile()方法上throws Exception之后,控制台上就不会再报告这个异常信息啦
  /*************【用于处理文件下载的StreamResult类的源代码片段】********************************/
  //这里显示的是org.apache.struts2.dispatcher.StreamResult类的源代码片段
  //public class StreamResult extends StrutsResultSupport{
    //protected String contentType = "text/plain";
    //protected String contentLength;
    //protected String contentDisposition = "inline";
    //protected String inputName = "inputStream";
    //protected InputStream inputStream;
    //protected int bufferSize = 1024;
  /*************【浅析StreamResult类的三个重要属性】******************************************/
  //这里我们主要关注一下StreamResult类的三个属性:contentType、contentDisposition、inputName
  //这些属性都是通过在struts.xml配置之后,由Struts2自动注入到对象里面去的
  //其中contentType用来指定下载的文件的类型,contentDisposition用来指定下载文件的名字
  //另外bufferSize用来设定下载文件时的缓冲区大小,默认为1KB,通常按照默认的1KB就可以了
  //实际上这些属性完全是根据HTTP协议得来的。HTTP协议就规定了下载文件的时候,需要使用到这些属性
  //其中最关键的就是protected String inputName属性,它是用来指定真正下载的文件的IO流
  //因此DownloadAction中必须返回一个输入流。因为下载的时候,本身就是一个从服务器端将文件输入过来的操作
  /***************************************************************************************/
}

2. xml代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <package name="default" extends="struts-default" namespace="/">
    <action name="download" class="com.wang.test.DownLoadPhoneFile">
      <result name="success" type="stream">
        <param name="contentType">application/vnd.ms-powerpoint</param>
        <param name="contentDisposition">attachment;filename="UserLogin_7.27.apk"</param>
        <param name="inputName">downloadFile</param>
      </result>
    </action>
  </package>
</struts>

3. JSP页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">
  <title>My JSP 'index.jsp' starting page</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
 </head>
 <body>
  <input type="button" value="手机端安装包下载" onclick="javascript:window.location='download.action';"/>
 </body>
</html>

希望本文所述对大家的JSP程序设计有所帮助。

(0)

相关推荐

  • Struts2+jquery.form.js实现图片与文件上传的方法

    本文实例讲述了Struts2+jquery.form.js实现图片与文件上传的方法.分享给大家供大家参考,具体如下: jquery.form.js是jQuery的一个官方用语支持异步上传文件的插件.官方网站:http://plugins.jquery.com/form/ 结合Struts2三步轻松实现文件上传 一般是针对一个页面可能不止一个Form表单,所以在一个面提交表单会影响到另一个表单,为此,图片上传表单就可以使用无刷新提交方式上传,也就是异步上传,这时jquery.from.js就派上用

  • Java以struts2为例介绍如何实现图片上传

    总的说图片上传有两种方式,一种是把图片文件写到数据库中,另一种是存到服务器文件目录中.写到数据库中的图片文件需要转换成二进制流的格式,占用数据库空间比较,适合少量图片的存储,比如说,系统中某些小图标,写到数据库中的优点是比较安全,不容易被用户不小心删除. 在struts2中实现(以图片上传为例) 1.FileUpload.jsp代码清单如下: <%@ page language="java" import="java.util.*" pageEncoding=

  • JavaEE中struts2实现文件上传下载功能实例解析

    本文实例为大家分享了struts2实现文件上传下载的具体实现代码,供大家参考,具体内容如下 一.文件上传 struts提交的文件组件上传, 前台: 1).提交方式POST 2).表单类型 multipart/form-data 3).input type=file 后台: Apache提供的FileUpload组件 核心类: FileItemFactory FileItem的工厂 ServletFileUpload servlet 中的文件上传的核心类 FileItem 封装了上传的表单文件项的

  • java中struts2实现文件上传下载功能实例解析

    本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签 复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

  • Struts2实现多文件上传功能

    前台form 表单:设置method=post,enctype=multipart/form-data. struts2在原有的上传解析器继承上做了进一步封装,更进一步简化了文件上传. Action需要使用3个属性来封装该文件域的信息: (1)类型为File的*属性封装了该文件域对应的文件内容: (2)类型为String的***FileName属性封装了该文件域对应的文件的文件类型: (3)类型为String的***ContentType属性封装了该文件域对应的文件的类型. 具体实现: 新建we

  • struts2单个文件上传的两种实现方式

    通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1.新建一个web工程,导入struts2上传文件所需jar,如下图 目录结构 2.新建Action 第一种方式 复制代码 代码如下: package com.ljq.action; import java.io.File; import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext; import com.opensymph

  • java中struts2实现简单的文件上传与下载

    一.Struts2文件上传  Struts2的文件上传实现非常简单,只需要简单几步就可完成: 注意: (1)文件上传的struts2标签为:<s:file name="" label="上传"/> (2)文件上传的前提是表单属性method="post" enctype="multipart/form-data"; (3)web应用中必须包含common-fileupload.jar和common-io.jar,因

  • 关于Struts2文件上传与自定义拦截器

    一.访问或添加request/session/application属性 public String scope() throws Exception{   ActionContext ctx = ActionContext.getContext();   ctx.getApplication().put("app", "应用范围");//往ServletContext里放入app   ctx.getSession().put("ses", &q

  • JavaWeb中struts2实现文件上传下载功能实例解析

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

  • struts2中实现多个文件同时上传代码

    在upload.jsp页面中将多个文件域对象命名为相同的名字,这样在action中就可以将多个文件域解析成一个数组,数组的大小就是文件域的个数,同时一个文件域解析成三个对应的变量,因此多个文件域对应三个数组,其中每个数组的大小就是文件域的个数.jsp页面代码如下: 复制代码 代码如下: <form action="upload.action" name="uploadForm" method="post" enctype="mul

随机推荐